Я работаю как приложение с классами и подклассами. Для каждого класса, супер и суб, есть переменная класса с именем label
. Я хотел бы, чтобы переменная label
для суперкласса по умолчанию использовала имя класса. Например:
class Super():
label = 'Super'
class Sub(Super):
label = 'Sub'
Вместо того, чтобы вручную вводить переменную для каждого класса, можно ли получить переменную из имени класса в суперклассе и автоматически заполнить ее для подклассов?
class Super():
label = # Code to get class name
class Sub(Super)
pass
# When inherited Sub.label == 'Sub'.
Причина этого в том, что это будет поведение по умолчанию. Я также надеюсь, что если я смогу получить поведение по умолчанию, я смогу переопределить его позже, указав альтернативный label
.
class SecondSub(Super):
label = 'Pie' # Override the default of SecondSub.label == 'SecondSub'
Я пытался использовать __name__
, но это не работает и дает мне только '__main__'
.
Я хотел бы использовать переменную класса label
в методах @classmethod
. Поэтому я хотел бы иметь возможность ссылаться на значение без фактического создания объекта Super() или Sub(), как показано ниже:
class Super():
label = # Magic
@classmethod
def do_something_with_label(cls):
print(cls.label)