由表达式分配的类变量

时间:2014-12-09 16:14:21

标签: python class static-members

我有一个类变量 - 一个列表 - 通过理解动态生成的值,例如:

class A:
    Field = [2**x for x in range(8)]
    . . .

我的问题:导入课程A或每次调用A.Field后计算此值? Python如何处理这样的声明,是否有一些限制或隐藏的障碍?

2 个答案:

答案 0 :(得分:7)

在执行class语句时(在Python中,classdef 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()只执行一次。