浅谈python 中类属性共享的问题
感觉这种理解有问题,举个例子来说。
classDog(object): name='dog' definit(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='newname'
而不应该是
dog1.name='newname'
因为实例属性同名而覆盖类属性,的确是一个很容易忽视、出错的地方。
>>>classDog(): ...name="dog" ... >>>d1=Dog() >>>d1.name 'dog' >>>d2=Dog() >>>d2.name 'dog' >>>Dog.name 'dog' >>>Dog.name="a" >>>d.name Traceback(mostrecentcalllast): File"",line1,in NameError:name'd'isnotdefined >>>d1.name 'a' >>>d2.name 'a' >>>
以上这篇浅谈python中类属性共享的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。