【发布时间】:2012-09-27 10:50:54
【问题描述】:
在__getattribute__() 特殊方法和Descriptors 的上下文中,我无法理解以下优先级是什么意思
我在Core Python Programming 中的topic("Precedence") - under topic ("Desriptors") 下读了 3 遍,仍然无法通过它。谁能解释这些优先级是什么,它们的用途是什么??
- 类属性
- 数据描述符
- 实例属性
- 非数据描述符
- 默认为
__getattr__()
我还阅读了python documentation,在那里我找到了以下声明:-
对于实例绑定,描述符调用的优先级取决于 关于定义了哪些描述符方法。描述符可以定义
__get__()、__set__()和__delete__()的任意组合。如果确实如此 未定义__get__(),则访问该属性将返回 描述符对象本身,除非对象的 实例字典。如果描述符定义了__set__()和/或__delete__(),是数据描述符;如果两者都没有定义,则它是非数据描述符。通常,数据描述符同时定义__get__()和__set__(),而非数据描述符只有__get__()方法。定义了
**__set__()**和**__get__()**的数据描述符始终覆盖 实例字典中的重新定义。相反,非数据 描述符可以被实例覆盖。Python 方法(包括
staticmethod()和classmethod())是 实现为非数据描述符。因此,实例可以 重新定义和覆盖方法。这允许单个实例 获得与同一类的其他实例不同的行为。
谁能举一个小例子来解释first paragraph 是什么意思?
还有这句话是什么意思-override a redefinition in an instance dictionary??
【问题讨论】:
-
@PiotrDobrogost.. 感谢 Piotr 提供这些链接.. :)
标签: python python-2.7