W poniższym przykładzie atrybut x
jest dostępne z gniazd obiektu chociaż x
jest obecny w __dict__
(nie jest to typowy lub prawdopodobnie przydatna sprawa, ale jestem ciekawy):Dostęp do atrybutów w Pythonie: pierwsze automaty, a następnie __dict__?
>>> class C(object):
... __slots__ = 'x'
...
>>> class D(C):
... pass
...
>>> obj = D()
>>> obj.x = 'Stored in slots'
>>> obj.__dict__
{}
>>> obj.__dict__['x'] = 'stored in __dict__'
>>> obj.x
'Stored in slots'
Czy ta kolejność dostępu (w pierwszej kolejności) udokumentowane zachowanie? lub po prostu szczegół implementacji?
wierzę, to należy również cytowane (z deskryptorów [wykonawczego] (http://docs.python.org/2/reference/datamodel.html#implementing-descriptors)): „deskryptor może być w żadnym słownika klasy właściciela lub w słowniku klasy dla jednego z rodziców ". –
@PavelAnossov: Nie jestem pewien, co to może dodać do zrozumienia automatów. Atrybuty szczeliny są implementowane jako deskryptory na klasie, a deskryptory danych pojawiają się przed wartościami "__dict__". To wystarczy, by udokumentować to zachowanie, nieprawdaż? –
@PavelAnossov: Tak, czasami ludzie są zdezorientowani co do tego, gdzie są wyświetlane deskryptory, ale nie jest to tutaj kwestia. –