У меня есть класс дескриптора X
здесь. Я пытаюсь использовать дескриптор X
в другом классе Y
Почему методы дескриптора Python не вызываются при вызове с синтаксисом obj.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__'. Тем не менее, я пытаюсь вызывать 'x .__ getattr__' с' y.x', что должны делать дескрипторы. –
Возможный дубликат [Динамическое добавление @property в python] (http://stackoverflow.com/questions/2954331/dynamically-adding-property-in-python) – jonrsharpe
@martineau Спасибо. Починил это. –