zachowanie pojęcia deskryptora w pythonie (mylące)

Zrozumiałem deskryptor Pythona, ale mam trochę zamieszania na ten temat ..

jeśli masz deskryptor klasy w następujący sposób

class Descriptor(object):
    def __get__(self, instance, owner):
        print 'getting'
        return self.value
    def __set__(self, instance, value):
        print 'setting'
        self.value = value
    def __delete__(self, instance):
        print 'deleting'
        del self.value

a klasa, której atrybuty chcemy zarządzać, to coś takiego ...

class Test(object):
    name = Descriptor()
    def __init__(self, name):
        print 'init test'
        self.name = name

kiedy tworzę obiekt klasy Testuj i zrób coś, co daje mi taką odpowiedź ...

t = Test('abc')
init test
setting
>>> t.name
getting 
'abc'
>>> del t.name
deleting
>>> t
<__main__.Test object at 0x013FCCD0>
>>> t.name
getting 

Teraz chcę mieć test1 klasy podobny do tego ..

class Test1(object):
    def __init__(self, value):
        print 'init test1'
        self.name = Descriptor()
        self. value = value

i jeśli utworzę obiekt Test1 i spróbuję uzyskać dostęp do atrybutu instancji Test1, otrzymam wynik podobny do tego ..

t1 = Test1(12)
t1.name
>>> getting
>>> 12
>>> t1.name = 30
>>> setting

P 1) Moje pytanie brzmi: czy ten atrybut nazwy zadeklarowany w init of Test1, jest związany z instancją Test1 czy nie ... ponieważ gdy próbuję pobrać słownik atrybutów t1, zwraca pusty dyktat ...

t1.__dict__
>>> {}

to samo dla instancji klasy Test t

 t.__dict__
 >>> {}

Kiedy dodaję nowy atrybut do dowolnej z tych instancji, tak ...

 t.some = 'some'
 >>> t1.some = 'some'

i znowu, jeśli próbuję uzyskać dostęp do słownika atrybutów, daje mi tylko to, co dodałem właśnie teraz ... teraz wszystkie atrybuty instancji

t.__dict__
>>> {'some': 'some'}
>>> t1.__dict__
>>> {'some': 'some'}

P 2) Jaka jest różnica między atrybutami instancji zdefiniowanymi w init (jak nazwa zmiennej i wartość w klasie Descriptor and Test) a atrybutami zdefiniowanymi po utworzeniu instancji (jak zmienna t.some).

P 3) Jak klasa Test różni się od klasy Test1.

questionAnswers(1)

yourAnswerToTheQuestion