浅谈python 中类属性共享的问题

Dawn ·
更新时间:2024-09-20
· 930 次阅读

感觉这种理解有问题,举个例子来说。

class Dog(object): name = 'dog' def init(self): self.age = 18 d1 = Dog() d2 = Dog()

这里有两个实例 d1,d2 吧。

d1.name # 输出 dogd2.name # 输出 dogd1.name = 'abc' d1.name # 输出 abcd2.name # 输出 dogDog.name # 输出 dog

原因是 d1.name 输出 dog 不是因为这个实例共享了类属性,而是因为这个实例没有 dog 属性,所以 python 查找了类属性。但是一旦你修改了 d1.name 相当于给 d1 实例绑定了 name 属性之后,d1.name 就与类属性无关了。既然这样就谈不上实例之间共享类属性了,因为只要一赋值,就相当于绑定了属性,则上述 d1.name 的含义和 d2.name 的含义就不同了,它们的值也不同,很明显它们的数据没有共享。

但是要修改类属性,应该用

Dog.name = 'new name'

而不应该是

dog1.name = 'new name'

因为实例属性同名而覆盖类属性,的确是一个很容易忽视、出错的地方。

>>> class Dog(): ... name = "dog" ... >>> d1 = Dog() >>> d1.name 'dog' >>> d2 = Dog() >>> d2.name 'dog' >>> Dog.name 'dog' >>> Dog.name = "a" >>> d.name Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'd' is not defined >>> d1.name 'a' >>> d2.name 'a' >>>

以上这篇浅谈python 中类属性共享的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。

您可能感兴趣的文章:浅谈python类属性的访问、设置和删除方法从零学Python之引用和类属性的初步理解



属性 类属性 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号