在下面的示例中,屬性x
從對象的槽訪問即使x
存在於__dict__
(這不是典型的或可能有用的情況下,但我很好奇):Python中的屬性訪問:第一個插槽,然後__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'
是這個訪問順序(插槽第一個)是一個記錄的行爲?或者只是一個實現細節?
我認爲這也應該引用(來自[Implementing Descriptors](http://docs.python.org/2/reference/datamodel.html#implementing-descriptors)):「描述符必須在所有者的類字典或父類之一的類字典中。 – 2013-02-28 15:29:30
@PavelAnossov:不知道那會增加理解插槽。槽屬性被實現爲類中的描述符,數據描述符出現在實例'__dict__'值之前。這足以證明這種行爲,不是嗎? – 2013-02-28 15:32:09
@PavelAnossov:是的,有時候人們會對描述符在哪裏查找感到困惑,但這不是問題。 – 2013-02-28 15:33:13