Verhalten des Deskriptorkonzeptes in Python (verwirrend)

Ich habe Python-Deskriptor verstanden, aber ich habe ein wenig Verwirrung darüber.

Wenn Sie einen Klassendeskriptor wie folgt haben

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

und eine Klasse, deren Attribute wir verwalten möchten, ist in etwa so ..

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

Wenn ich ein Objekt der Klasse Test erstelle und etwas tue, antworte ich wie folgt ...

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

Jetzt möchte ich eine Klasse wie diese Test1 haben ..

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

und wenn ich ein Objekt von Test1 erstelle und versuche, auf das Attribut der Instanz von Test1 zuzugreifen, erhalte ich eine Ausgabe wie diese.

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

Frage 1: Meine Frage ist, ob dieses Namensattribut in init von Test1 deklariert ist, an die Instanz von Test1 gebunden ist oder nicht. Wenn ich versuche, das Attributwörterbuch von t1 abzurufen, wird ein leeres Dikt zurückgegeben.

t1.__dict__
>>> {}

Gleiches gilt für die Instanz t der Klasse Test

 t.__dict__
 >>> {}

Wenn ich einer dieser Instanzen ein neues Attribut hinzufüge, wie folgt ...

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

und wieder, wenn ich versuche, auf das Attributwörterbuch zuzugreifen, gibt es mir nur das, was ich gerade hinzugefügt habe .. jetzt alle Instanzattribute

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

F 2) Worin besteht also der Unterschied zwischen den in init definierten Instanzattributen (wie Variablenname und -wert in den Klassen Descriptor und Test) und den Attributen, die nach der Instanzerstellung definiert wurden (wie Variable t.some).

F 3) Wie unterscheidet sich die Klasse Test von der Klasse Test1?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage