我有一个类变量 - 一个列表 - 通过理解动态生成的值,例如:
class A:
Field = [2**x for x in range(8)]
. . .
我的问题:导入课程A
或每次调用A.Field
后计算此值? Python如何处理这样的声明,是否有一些限制或隐藏的障碍?
答案 0 :(得分:7)
在执行class
语句时(在Python中,class
和def
are executable statements等),表达式将被计算一次。
执行此操作时,A
或子类的所有实例将共享相同的Field
。
...一旦导入A类,就会计算出这个值......
请注意,没有"导入"这里。如果将class
语句放在模块中,并多次导入该模块,则该语句仍将只执行一次。
答案 1 :(得分:3)
以下示例显示仅评估一次:
>>> l=range(2)
>>> l
[0, 1]
>>> class A:
... Field = l.pop()
...
>>> A.Field
1
>>> A.Field
1
>>> l
[0]
.pop()
只执行一次。