¿El descriptor de datos de Python no funcionó como variable de instancia? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
¿Por qué no se llama al descriptor cuando se define como atributo de instancia? 1 respuestaComo describió la demostración oficialaquí, se imprimirá el siguiente códigoRetrieving var "x"
.
class RevealAccess(object):
"""A data descriptor that sets and returns values
normally and prints a message logging their access.
"""
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 MyClass1(object):
x = RevealAccess(10, 'var "x"')
MyClass1().x
Pero six
es una variable de instancia, la maquinaria del descriptor de datos no funcionará, el siguiente código no imprimirá nada.
class MyClass2(object):
def __init__(self):
self.x = RevealAccess(10, 'var "x"')
MyClass2().x
Y, si implemento la maquinaria del descriptor de datos manualmente como se describeaquí, el siguiente códigoRetrieving var "x"
de nuevo.
class MyClass3(object):
def __init__(self):
self.x = RevealAccess(10, 'var "x"')
def __getattribute__(self, key):
"Emulate type_getattro() in Objects/typeobject.c"
v = object.__getattribute__(self, key)
if hasattr(v, '__get__'):
return v.__get__(None, self)
return v
MyClass3().x
Entonces, ¿la maquinaria del descriptor de datos predeterminado no está implementada como se describe en el documento?
Estoy usando python 2.7.10.