0%

关于Python类的属性的一些问题

区别实例属性和类属性

类属性

这样定义的属性是类属性, 我们 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