【发布时间】:2014-12-09 16:14:20
【问题描述】:
我有一个 类变量 - 一个列表 - 其值由理解动态生成,例如:
class A:
Field = [2**x for x in range(8)]
. . .
我的问题:这个值是在类A 被导入后计算的,还是每次我调用A.Field 时计算的? Python 如何处理此类声明,是否存在一些限制或隐藏的障碍?
【问题讨论】:
标签: python class static-members
我有一个 类变量 - 一个列表 - 其值由理解动态生成,例如:
class A:
Field = [2**x for x in range(8)]
. . .
我的问题:这个值是在类A 被导入后计算的,还是每次我调用A.Field 时计算的? Python 如何处理此类声明,是否存在一些限制或隐藏的障碍?
【问题讨论】:
标签: python class static-members
在执行class 语句时,表达式被计算一次(在Python 中,诸如class 和defare executable statements 之类的东西)。
当您这样做时,A 或子类的所有实例将共享相同的Field。
...这个值是在 A 类被导入后计算出来的吗...
注意这里没有“导入”。如果您将class 语句放在一个模块中,并多次导入该模块,该语句仍将只执行一次。
【讨论】:
这里是一个例子,它只被评估一次:
>>> l=range(2)
>>> l
[0, 1]
>>> class A:
... Field = l.pop()
...
>>> A.Field
1
>>> A.Field
1
>>> l
[0]
.pop() 只执行一次。
【讨论】: