Я работаю как приложение с классами и подклассами. Для каждого класса, как супер, так и sub, существует переменная класса, называемая label
. Мне нужна переменная label
для суперкласса по умолчанию для имени класса. Например:Имя класса Python как переменная класса
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
. Поэтому я хотел бы, чтобы иметь возможность ссылаться на значение, не имея на самом деле создать супер() или Sub() объект, как показано ниже:
class Super():
label = # Magic
@classmethod
def do_something_with_label(cls):
print(cls.label)
Вы должны были указать, что вам нужно, чтобы он работал с неинтересными классами. вы бы получили более правильное решение раньше –
Вы правы, я должен был. Сейчас это исправит. – user2004245