考虑以下代码
Inator
i 的确切初始化时间是什么时候? 执行之前之前还是执行之后之前?
答案 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 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