区别实例属性和类属性
类属性
这样定义的属性是类属性, 我们 new 两个实例测试下
1 2 3 4 5 6 7 8 9 10 11
| class MyClass(object): name: list = list() if __name__ == '__main__': m1 = MyClass() m2 = MyClass() print(id(m1.name)) print(id(m2.name))
|
可以看到指向了相同的地址
1 2 3 4
| 2078100290056 2078100290056
Process finished with exit code 0
|
实例属性
再 __init__
方法中创建的属性是实例属性
1 2 3 4 5 6 7 8 9 10 11 12
| class MyClass(object): def __init__(self): self.name: list = list() if __name__ == '__main__': m1 = MyClass() m2 = MyClass() print(id(m1.name)) print(id(m2.name))
|
可以看到指向了不同的地址
1 2 3 4
| 1631300614792 1631300614856
Process finished with exit code 0
|
总结
类属性属于类所有, 所有实例共享一个属性
实例属性属于实例所有, 每个实例各自独享一个属性
注意
不要对实例属性和类属性使用相同的名字,否则将产生难以发现的错误。
https://www.liaoxuefeng.com/wiki/1016959663602400/1017594591051072