【发布时间】:2017-12-09 19:20:54
【问题描述】:
来自 Python data model documentation:
object.__get__(self, instance, owner=None)调用以获取所有者类的属性(类属性访问)或该类的实例(实例属性访问)。可选的
owner参数是所有者类,而instance是通过owner访问属性时访问属性的实例或None。此方法应返回计算的属性值或引发
AttributeError异常。PEP 252 指定
__get__()可以用一个或两个参数调用。 Python 自己的内置描述符支持此规范;但是,某些第三方工具可能具有需要两个参数的描述符。 Python 自己的__getattribute__()实现总是传入两个参数,无论它们是否需要。
object.__set__(self, instance, value)调用以将所有者类的实例
instance上的属性设置为新值 value。注意,添加
__set__()或__delete__()会将描述符的种类更改为“数据描述符”。有关详细信息,请参阅调用描述符。
object.__delete__(self, instance)调用以删除所有者类的实例
instance上的属性。
为什么__get__ 使用owner 而__set__ 和__delete__ 没有?
这是否意味着当描述符同时提供__get__ 和__set__ 时,
- 无论是属于所有者类的实例还是属于所有者类,我们都可以获得一个属性,
- 我们可以设置和删除属于所有者类实例的属性,但不能在属于所有者类时设置和删除?
我的问题实际上是this one 的一部分。
【问题讨论】:
标签: python attributes datamodel python-descriptors