Я пытаюсь лучше понять дескрипторы.Понимание дескрипторов Python
Я не понимаю, почему в методе foo дескрипторы __get__
метод не вызван.
Насколько я понимаю, дескрипторов __get__
метод всегда дозвонились, когда доступ к объектам атрибутов с помощью оператора точки, или когда я использую __getattribute__()
.
Согласно Python documentation:
class RevealAccess(object):
def __init__(self, initval=None, name='var'):
self.val = initval
self.name = name
def __get__(self, obj, objtype):
print('Retrieving', self.name)
return self.val
def __set__(self, obj, val):
print('Updating', self.name)
self.val = val
class MyClass(object):
x = RevealAccess(10, 'var "x"')
y = 5
def foo(self):
self.z = RevealAccess(13, 'var "z"')
self.__getattribute__('z')
print(self.z)
m = MyClass()
m.foo()
m.z # no print
m.x # prints var x
Я не совсем понимаю, в чем проблема? – user3467349
@ user3467349: 'm.z' и' m.x' - оба экземпляра класса 'RevealAccess', который реализует протокол дескриптора. OP ожидал, что протокол будет использоваться как для 'm.z', так и для' m.x'. –
@ пользователь3467349: например. вам нужно понять, что протокол дескриптора * есть *, прежде чем вы сможете ответить на вопрос. –