Доступ к атрибутам класса в python из метода класса

#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. Ты прав. Но в нем все еще нет реальной строки, только объявление строки.