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.