描述符和虚线查找
描述符是(通常)类的属性并且具有 __get__
,__set__
或 __delete__
特殊方法的任何对象。
数据描述符包含 __set__
或 __delete__
中的任何一个
这些可以控制实例上的虚线查找,并用于实现函数 staticmethod
,classmethod
和 property
。点查找(例如,类 Foo
查找属性 bar
的实例 foo
- 即 foo.bar
)使用以下算法:
-
Foo
在课堂上被抬起来了。如果它在那里并且它是数据描述符,则使用数据描述符。这就是property
如何能够控制对实例中数据的访问,而实例无法覆盖它。如果没有数据描述符那么 -
在实例
__dict__
中查找了bar
。这就是我们可以使用虚线查找覆盖或阻止从实例调用的方法的原因。如果实例中存在bar
,则使用它。如果没有,我们那么 -
在课堂上看看
Foo
forbar
。如果它是描述符,则使用描述符协议。这是函数(在此上下文中,未绑定方法),classmethod
和staticmethod
的实现方式。否则它只是返回那里的对象,或者有一个AttributeError