Loading

Python类属性与实例属性理解

按理讲,类属性改变,类的实例对象这个属性也应该被改变,但是在python中实际却不是这样

class test():
    name = 111

a = test()
b = test()

a.name = 222
test.name = 333
print(a.name,b.name,test.name)

输出:
222 333 333

这里a.name的值没有被test.name = 333改变

查看属性在内存中的位置

print(id(a.name))
print(id(b.name))
print(id(test.name))

输出:
140705896729248
2154539206672
2154539206672

再查看对象的属性

print(a.__dict__)
print(b.__dict__)
print(test.__dict__)

{'name': 222}
{}
{...'name': 333.....}

所以当操作a对象给name属性赋值时,创建了a的name属性,可以理解为这个name已经不是类的属性而是a对象的属性了(好绕)

b没有创建,所以当查询b.name的时候实际是查的test.name(内存位置相同)

所以类属性与实例属性查询的优先级为: 实例属性>类属性     实例属性没有是会去查类属性

 

posted @ 2019-06-08 16:35  fengf233  阅读(1114)  评论(0编辑  收藏  举报