Дескриптор данных Python не работал как переменная экземпляра? [Дубликат]

На этот вопрос уже есть ответ здесь:

Почему дескриптор не вызывается, когда он определен как атрибут экземпляра? 1 ответ

Как описано в официальном демоВот, следующий код напечатаетRetrieving 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

Но еслиx является переменной экземпляра, механизм дескриптора данных не будет работать, следующий код не будет ничего печатать.

class MyClass2(object):
    def __init__(self):
       self.x = RevealAccess(10, 'var "x"')

MyClass2().x

И, если я реализую механизм дескриптора данных вручную, как описаноВот, следующий код будетRetrieving var "x" снова.

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

Итак, механизм дескриптора данных по умолчанию не реализован, как описано в документе?

Я использую Python 2.7.10.

Ответы на вопрос(1)

Ваш ответ на вопрос