Нельзя наследовать от нескольких классов, определяющих __slots__?

Недавно меня встревожила одна ситуация в Python, и ее причина до сих пор не полностью ясна после небольшого исследования. Следующие определения классов работают безукоризненно и дают то, что задумано:

class A: __slots__ = 'a', 'b'
class B(A): __slots__ = ()
class C(A): __slots__ = ()
class D(B, C): __slots__ = ()

Это четыре класса, организованные в виде ромба наследования. Однако несколько похожий рисунок не допускается. Следующие определения класса должны функционировать так же, как и первое:

class B: __slots__ = 'a', 'b'
class C: __slots__ = 'a', 'b'
class D(B, C): __slots__ = ()

Traceback (most recent call last):
  File "", line 1, in 
    class D(B, C): __slots__ = ()
TypeError: multiple bases have instance lay-out conflict

Однако в этом примере возникает ошибка TypeError. Таким образом, возникают три вопроса: (1) Является ли это ошибкой в ​​Python, учитывая имена слотов? (2) Чем можно оправдать такой ответ? (3) Каков наилучший обходной путь?


Ссылки:

18
задан Aaron Hall 31 October 2018 в 20:01
поделиться