百度指数购买,seo一个关键词多少钱,wordpress+悬浮按钮,免费云主机试用一年类属性和实例属性名字冲突怎么办
修改类属性会导致所有实例访问到的类属性全部都受影响#xff0c;但是#xff0c;如果在实例变量上修改类属性会发生什么问题呢#xff1f;class Person(object):address Earthdef __init__(self, name):self.name namep1 Person(Bob)
p2… 类属性和实例属性名字冲突怎么办
修改类属性会导致所有实例访问到的类属性全部都受影响但是如果在实例变量上修改类属性会发生什么问题呢class Person(object):address Earthdef __init__(self, name):self.name namep1 Person(Bob)
p2 Person(Alice)print Person.address Person.addressp1.address China
print p1.address p1.addressprint Person.address Person.address
print p2.address p2.address
结果如下Person.address Earth
p1.address China
Person.address Earth
p2.address Earth
我们发现在设置了 p1.address China 后p1访问 address 确实变成了 China但是Person.address和p2.address仍然是Earch怎么回事原因是 p1.address China并没有改变 Person 的 address而是给 p1这个实例绑定了实例属性address 对p1来说它有一个实例属性address值是China而它所属的类Person也有一个类属性address所以:访问 p1.address 时优先查找实例属性返回China。访问 p2.address 时p2没有实例属性address但是有类属性address因此返回Earth。可见当实例属性和类属性重名时实例属性优先级高它将屏蔽掉对类属性的访问。当我们把 p1 的 address 实例属性删除后访问 p1.address 就又返回类属性的值 Earth了del p1.address
print p1.address
# Earth
可见千万不要在实例上修改类属性它实际上并没有修改类属性而是给实例绑定了一个实例属性。任务
请把上节的 Person 类属性 count 改为 __count再试试能否从实例和类访问该属性。 实例属性的优先级高屏蔽类属性转载于:https://www.cnblogs.com/superxuezhazha/p/5732752.html