@astatium135

Как получить имя дочернего класса из родительского метакласса в Python?

Имеется 2 класса (модели данныз в Django)
class a(models.Model):
    name = #получение имени класса
    class Meta:
        abstract = True

class b(a):
    v = 220

x_b = b()
print(b.name)


Нужно, чтобы вывело "b".
Хак с import traceback -> name = traceback.extract_stack()[-1][2] выводит "a", то есть имя родительского класса, а нужно дочернего.
  • Вопрос задан
  • 939 просмотров
Пригласить эксперта
Ответы на вопрос 1
@thoughteer
На уровне класса - только через задание атрибута в метаклассе. Но проще сделать это на уровне инстансов в виде вычисляемого свойства:
class a(models.Model):
    @property
    def name(self):
        return self.__class__.__name__  # whatever
    class Meta:
        abstract = True

class b(a):
    v = 220

x_b = b()
print(b.name)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы