【问题标题】:Class variable assigned by expression由表达式分配的类变量
【发布时间】:2014-12-09 16:14:20
【问题描述】:

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

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

我的问题:这个值是在类A 被导入后计算的,还是每次我调用A.Field 时计算的? Python 如何处理此类声明,是否存在一些限制或隐藏的障碍?

【问题讨论】:

    标签: python class static-members


    【解决方案1】:

    在执行class 语句时,表达式被计算一次(在Python 中,诸如classdefare executable statements 之类的东西)。

    当您这样做时,A 或子类的所有实例将共享相同的Field

    ...这个值是在 A 类被导入后计算出来的吗...

    注意这里没有“导入”。如果您将class 语句放在一个模块中,并多次导入该模块,该语句仍将只执行一次。

    【讨论】:

      【解决方案2】:

      这里是一个例子,它只被评估一次:

      >>> l=range(2)
      >>> l
      [0, 1]
      >>> class A:
      ...   Field = l.pop()
      ...
      >>> A.Field
      1
      >>> A.Field
      1
      >>> l
      [0]
      

      .pop() 只执行一次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-07
        • 2013-07-04
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 2013-12-06
        相关资源
        最近更新 更多