什么时候在Python中初始化类变量?

时间:2018-12-31 19:38:11

标签: python class static initialization

考虑以下Python 3代码:

  A类:
    b = LongRunningFunctionWithSideEffects()
 

何时会调用 LongRunningFunctionWithSideEffects()?目前该模块已导入?还是目前以某种方式第一次使用该类?

3 个答案:

答案 0 :(得分:4)

当遇到class语句时,即在类中运行代码-即。在导入过程中。

这是因为与Java或C#类定义不同,Python class语句实际上是可执行代码。

class A:
  print("I'm running!") # yup, code outside a method or field assignment!
  b = print("Me too!")

print("Wait for me!")

结果整齐地按执行顺序排列:

I'm running!
Me too!
Wait for me!

答案 1 :(得分:3)

当前模块已导入

test.py

def x():
    print('x')

class A:
    x = x()

然后

Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
x

答案 2 :(得分:1)

在导入时完成。这些称为静态变量,并在类级别定义。这些变量每个类创建1个,而不是每个对象创建1个。它们是加载在导入时发生的类的一部分。

以下是一个示例:

classA.py

class A:
    print("Printing before Static Variable Creation")
    class_var = 1

    def __init__(self):
        instance_var = 2

main.py

from classA import A

在创建静态变量之前进行打印

print('Printing Class Variable Value : ',A.class_var)

打印类变量值:1

print(A.__dict__)

{'模块':'classA',                'class_var':1,               ' init ':函数类A.A. init (自身),               ' dict ':'A'对象的属性' dict ',               '弱引用':'A'个对象的属性'弱引用”,               ' doc ':无}