Nell'esempio che segue, attributo x
si accede dalle fessure degli oggetti anche se x
è presente in __dict__
(questo non è un caso tipico o probabilmente utile, ma sono curioso):Accesso agli attributi in Python: primi slot, quindi __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'
Is questo ordine di accesso (slot prima) un comportamento documentato? o semplicemente un dettaglio di implementazione?
Credo che questo dovrebbe anche essere citato (da [Implementing Descriptors] (http://docs.python.org/2/reference/datamodel.html#implementing-descriptors)): "il descrittore deve essere in entrambi il dizionario di classe del proprietario o nel dizionario di classe per uno dei suoi genitori ". –
@PavelAnossov: non sono sicuro di cosa aggiungere alla comprensione degli slot. Gli attributi slot sono implementati come descrittori sulla classe, ei descrittori di dati vengono prima dei valori di istanza '__dict__'. Questo è sufficiente per documentare questo comportamento, non è vero? –
@PavelAnossov: Sì, a volte le persone sono confuse su dove vengono visualizzati i descrittori, ma qui non è in discussione. –