慕运维8079593
对于带槽的类使用多重继承,一种实用的选择是只有一个父类具有非空槽。其余的类然后用作具有定义(但为空)插槽的“混合”。然后,在子类中,根据需要简单地定义最终插槽。如前所述,当所有父项都定义非空槽时,多重继承是有问题的。>>> class B: __slots__ = ('a', 'b')... >>> class C: __slots__ = ('a', 'b')... >>> class D(C, B): __slots__ = ('a', 'b')... Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: multiple bases have instance lay-out conflict>>> class D(C, B): __slots__ = ('a', 'b', 'c')... Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: multiple bases have instance lay-out conflict这里建议的方法构成C一个定义空槽的“mixin”类。然后子类使用多重继承,可以简单地将插槽定义为所需的任何内容。>>> class B: __slots__ = ('a', 'b')... >>> class C: __slots__ = ()... >>> class D(C, B): __slots__ = ('a', 'b')... >>> class D(C, B): __slots__ = ('a', 'b', 'c')...