2
我想更好地理解描述符。瞭解Python描述符
我不明白爲什麼在foo方法中描述符__get__
方法沒有被調用。
據我瞭解描述符__get__
方法,當我訪問的對象總是被調用通過點操作屬性或當我使用__getattribute__()
。
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'。 –
@ user3467349:例如在回答問題之前,您需要了解描述符協議*的含義。 –