Python предоставляет два различных вида дисплеев (синтаксис, который вы можете неофициально называть литералом) для определения списка.
list_1
- это «обычный» дисплей списка, и использует самое последнее связанное значение для name
.
list_2
определяется с использованием понимания списка, которое реализуется с использованием анонимной функции. Теперь name
- свободная переменная в этой функции, и поэтому она преобразуется в значение name
в ближайшей области видимости. Поскольку оператор class
не устанавливает sh новую область, то это будет глобальная область, , а не временное пространство имен, установленное оператором class
.
Старайтесь избегать используя атрибуты class
в качестве «локальных» переменных в вашем определении класса.
Если в методе класса вы хотите, чтобы name
был атрибутом класса, а не глобальной переменной, вам нужно явно указать:
@classmethod
def hello(cls):
return '{} says hello'.format(<b>cls.</b>name)