首页 新闻 会员 周边

关于Python中属性的优先级别有点疑问,请指教

0
悬赏园豆:10 [待解决问题]

Python核心编程中指出,属性的优先级别为:

1.类属性

2.数据描述符

3.实例属性

4.非数据描述符

5.默认的__getattr__()

问题就在类属性和实例属性上,代码如下:

class A(object):
    foo=1.3;
 
a=A();
print a.foo;
a.foo=15;
print a.foo;
del a.foo;
print a.foo; 

输出为1.3,15后最后一次又一次的输出了1.3

但不是说类属性的优先级高于实例属性吗?那为什么a.foo=15是创建了一个实例属性foo而不是将类属性foo的值改为15?

百思不得其解,请问各位高人

inuyasha0618的主页 inuyasha0618 | 初学一级 | 园豆:132
提问于:2013-10-22 22:55
< >
分享
所有回答(2)
0

属性访问的主题比较复杂:它涉及 实例,还有 普通属性数据描述符非数据描述符 之分,而且针对 获取设置删除 的处理规则也不同,不能一概而论。

详细讲解看这里:Python基础:新式类的属性访问

RussellLuo | 园豆:201 (菜鸟二级) | 2013-11-18 19:27
0

a.foo=15 相当于对象定义了一个属性,在a.__dict__中可以看到foo.两次输出1.3是因为a没有foo属性就从a的类A中取foo属性

哨兵 | 园豆:209 (菜鸟二级) | 2014-11-10 14:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册