Im Beispiel unten, Attribut x
wird auch aus den Schlitzen des Objekts zugegriffen obwohl x
in __dict__
vorhanden ist (dies ist nicht ein typischer oder wahrscheinlich nützlich Fall ist, aber ich bin neugierig):Attribut Zugriff in Python: erste Slots, dann __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'
Ist diese Reihenfolge des Zugriffs (Slots zuerst) ein dokumentiertes Verhalten? oder einfach ein Implementierungsdetail?
Ich glaube, das sollte auch zitiert werden (aus [Implementierende Deskriptoren] (http://docs.python.org/2/reference/datamodel.html#implementing-descriptors)): "Der Deskriptor muss in beiden sein das Klassenwörterbuch des Eigentümers oder im Klassenwörterbuch für eines seiner Eltern ". –
@PavelAnossov: Nicht sicher, was das zum Verständnis von Steckplätzen beitragen würde. Die Slot-Attribute werden als Deskriptoren für die Klasse implementiert, und Datendeskriptoren kommen vor den Werten der Instanz "__dict__". Das ist genug, um dieses Verhalten zu dokumentieren, nicht wahr? –
@PavelAnossov: Ja, manchmal sind die Leute verwirrt, wo Deskriptoren nachgeschlagen werden, aber das steht hier nicht in Frage. –