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

时间:2019-05-04 14:13:01

标签: python python-3.x oop

考虑以下代码

Inator

i 的确切初始化时间是什么时候? 执行之前之前还是执行之后之前?

2 个答案:

答案 0 :(得分:2)

之前。

在实例化__init__之前,不会运行Foo方法。只要在代码中遇到类定义,就会运行i=1

您可以通过添加打印语句来看到这一点:

print('Before Foo')
class Foo:
    i = 1
    print(f'Foo.i is now {i}')

    def __init__(self):
        print('Inside __init__')
        self.i += 1
        print(f'i is now {self.i})
print('After Foo')

print('Before __init__')
foo = Foo()
print('After __init__')

打印:

Before Foo
Foo.i is now 1
After Foo
Before __init__
Inside __init__
i is now 2
After __init__

但是请注意,您的self.i += 1 不会修改类属性Foo.i

foo.i # This is 2
Foo.i # This is 1

答案 1 :(得分:0)

第一次在源代码中使用ClassName时,将初始化class属性,同时通过执行ClassMethod.attribute

在代码中使用class属性
class Foo:
    i = 1 # initialization
    def __init__(self):
        #Use ClassName.attribute to access class attribute
        Foo.i += 1

#I used the Name of the class here, Foo.i will be 1
print(Foo.i)
#1

#Instantiated Foo
t = Foo()

#Value of i changes to 2
print(t.i)
#2