В приведенном ниже примере, атрибут 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'
Is этот порядок доступа (сначала слоты) документированное поведение? или просто деталь реализации?
Я считаю, что это также следует указывать (из [Реализация дескрипторов] (http://docs.python.org/2/reference/datamodel.html#implementing-descriptors)): «дескриптор должен быть в любом словарь класса владельца или словарь классов для одного из его родителей ». –
@PavelAnossov: Не уверен, что это добавит к пониманию слотов. Атрибуты слота реализованы как дескрипторы класса, а дескрипторы данных - до значений '__dict__'. Этого достаточно, чтобы документировать это поведение, не так ли? –
@PavelAnossov: Да, иногда люди путаются относительно того, где ищут дескрипторы, но это не проблема. –