【发布时间】:2015-01-26 18:16:27
【问题描述】:
我在这里有一个描述符类X。我尝试在另一个类Y 中使用描述符X
class X:
def __init__(self, value):
self.value = value
def __get__(self, instance, owner):
print('#### X.__get__ ####')
return self.value
def __set__(self, instance, value):
print('#### X.__set__ ####')
self.value = value
class Y:
def __init__(self):
self.x = X(10)
y = Y()
print(y.x)
y.x = 20
我希望语句print(y.x) 会调用x.__get__,语句y.x = 20 会调用x.__set__,但它没有发生。当我运行上面的程序时,我只是得到这个输出。
<__main__.X object at 0x7fc65f947950>
为什么没有调用描述符方法?
【问题讨论】:
-
@jonrsharpe 我不认为
__getattr__、y.x会调用x.__getattr__。相反,y.x将调用y.__getattr__。但是,我试图用y.x调用x.__getattr__,这是描述符应该做的。 -
@martineau 谢谢。修好了。
标签: python python-3.x descriptor