相关疑难解决方法(0)

为什么 __get__ 拥有一个所有者而 __set__ 和 __delete__ 没有?

来自 Python数据模型文档

object.__get__(self, instance, owner=None)

调用以获取所有者类的属性(类属性访问)或该类的实例的属性(实例属性访问)。可选owner参数是所有者类,而instance属性是通过其访问的实例,或者None是通过owner.

此方法应返回计算出的属性值或引发AttributeError异常。

PEP 252 指定可以__get__()使用一个或两个参数调用。Python 自己的内置描述符支持这个规范;但是,某些第三方工具可能具有需要两个参数的描述符。__getattribute__()无论是否需要,Python 自己的实现总是传入这两个参数。

object.__set__(self, instance, value)

调用以将instance所有者类的实例上的属性设置为新值 value。

请注意,将描述符的种类添加__set__()__delete__()更改为“数据描述符”。有关更多详细信息,请参阅调用描述符。

object.__delete__(self, instance)

调用以删除instance所有者类的实例上的属性。

为什么__get__需要一段owner时间__set____delete__没有?

这是否意味着当描述符同时提供__get__和时__set__

  • 我们可以得到一个属性,无论它是属于所有者类的实例还是属于所有者类,
  • 我们可以在属性属于所有者类的实例时设置和删除属性,但在属于所有者类时不能设置和删除属性?

我的问题实际上是这个问题的一部分。

python attributes datamodel python-descriptors

3
推荐指数
1
解决办法
508
查看次数