【发布时间】:2018-05-27 21:04:15
【问题描述】:
为什么 Python 描述符适用于类级别属性而不适用于实例级别属性。
class PropDescriptor:
def __init__(self,*args):
print("Init {} {}".format(type(self),args))
self.value = 0
def __get__ (self,instance,owner):
print("get using descriptor")
return instance.instance_att
def __set__(self, instance, value):
print("set using descriptor")
instance.instance_att = value
class TestClass:
class_att = PropDescriptor()
def __init__(self):
self.instance_att = PropDescriptor()
t = TestClass()
print("set instance level...")
t.instance_att = 3
print("\nget instance level...")
print(t.instance_att)
print("\nset class level...")
t.class_att = 4
print("\nget class level...")
print(t.class_att)
输出:
Init <class '__main__.PropDescriptor'> ()
Init <class '__main__.PropDescriptor'> ()
set instance level...
get instance level...
3
set class level...
set using descriptor
get class level...
get using descriptor
4
instance_att 似乎没有使用描述符。
我找到了这个identical 问题,但它并没有真正回答这个问题所有答案都参考了帖子中的第二个问题。
实例绑定
如果绑定到对象实例,则 a.x 被转换
进入通话:
type(a).__dict__['x'].__get__(a, type(a))。
但是:
(我的代码等效)语句 type(t).__dict__["instance_att"] 的第一部分引发了 KeyError,因为 type(t).__dict__ 没有这样的属性。这是一个实例级别的att。不是吗?
我错过了什么?
【问题讨论】:
标签: python descriptor