@Sergi4

Почему переопределяются имена __slots__ при наследовании объектов?

есть базовый класс:

class V8_metadataobject(IV8_metadataobject):
    __slots__ = ('__id',
                 '__typeid', 
                 '__description',
                 '__synonym',
                 '__ValueTypeList')
его потомок:
class V8_Reference(V8_metadataobject):
    __slots__ = ('__attributes', 
                 '__structure', 
                 '__hierahylimit', 
                 '__ishierahy', 
                 '__ishierahylimited',
                 '__owners',)

что потом вижу при отладке:
653a05e7a767f251159927.jpeg
Вопрос:
почему происходит изменение имени slot-а?
ожидаю __description, получаю <имя класса>__description
как с этим бороться, без варианта переписывания классов
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 3
@va_k
Уберите двойное подчёркивание. Именно они и даёт тот результат который вам не нравится.
Ответ написан
Комментировать
Maksim_64
@Maksim_64
Data Analyst
Убери двойной подчеркивание, оставь одинарное. Если ты создаешь атрибут с двойном подчеркиванием, то python хранит атрибут в __dict__ добавляя одно нижнее подчеркивание затем имя класса, то есть вот так _ClassName__attrname. Если ты в __slots__ уберешь двойной подчеркивание перед именем оставишь одинарное, то имена атрибутов будут хранится, как ты ожидаешь.
Ответ написан
Комментировать
@Sergi4 Автор вопроса
Спасибо!
Помогло.
наверное в каком-нибудь PEP-е это указано...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы