name = 'Guido'
class MyClass:
name = 'Raymond'
list_1 = [name] * 3
list_2 = [name for i in range(3)]
@classmethod
def hello(cls):
return '{} says hello'.format(name)
如果我这样做?它打印以下内容:
>>> print(MyClass.hello())
Guido says hello
>>> print(MyClass.list_1)
['Raymond', 'Raymond', 'Raymond']
>>> print(MyClass.list_2)
['Guido', 'Guido', 'Guido']
我的问题是,
Raymond says hello
Python提供了两种不同的显示(可以非正式地称为文本的语法)来定义列表
list_1
是一个“普通”列表显示,并使用name
的最新绑定值list_2
是使用列表理解定义的,它是使用匿名函数实现的。现在name
在该函数中是一个自由变量,因此它在最近的封闭范围内解析为name
的值。由于class
语句不建立新的作用域,因此它将是全局作用域,而不是class
语句建立的临时命名空间尽量避免在类定义中使用
class
属性作为“局部”变量在类方法中,如果希望
name
成为类属性,而不是全局变量,则需要显式:相关问题 更多 >
编程相关推荐