#python #class #attributes #decorator #class-method
Вопрос:
Предполагая, что у меня есть следующий класс:
class Foo:
bar : str
@classmethod
def foobar(self): #self = cls
print(??)
И я хочу распечатать атрибут bar
foobar
.
Как мне это сделать? self.bar
выдает мне ошибку:
AttributeError: type object 'Foo' has no attribute 'bar'
Как мне это сделать?
Комментарии:
1. похоже, вы только назначили аннотацию переменной, но на самом деле не определили значение.
bar: str
Синтаксис присваивает переменной только аннотациюstr
, которая также отображается в переменной__annotations__
Ответ №1:
Следование-это путь
class Foo:
bar: str = None # Initialize your attribute in this way
@classmethod
def foobar(cls): # self = cls
print(cls.bar)
a = Foo()
a.foobar()
Ответ №2:
Потому что str не присвоено фактическое значение.
Вы также должны отступать с 4 пробелами, а не с 1.
Комментарии:
1. Я думаю, что «Str не является фактическим значением» немного вводит в заблуждение (типы тоже являются значениями в Python). Скорее, проблема в том, что
bar : str
это аннотация типа , которая не присваивает значениеbar
, а только объявляет, что типbar
, как ожидается, будет иметь.2. Ты прав. Но в нем все еще нет реальной строки, только объявление строки.