如何使用具有多重继承的collections.abc类?

时间:2016-06-11 17:27:08

标签: python python-3.x multiple-inheritance metaclass

我有一个问题,我想使用collections.abc.MutableSequence中的mixin方法,但我还必须继承其他内容。

class Thing(urwid.Pile, collections.abc.MutableSequence):
    ...

我最终得到了

TypeError: metaclass conflict: the metaclass of a derived class must be
a (non-strict) subclass of the metaclasses of all its bases

如何确定正在进行的操作并进行修复? metaclass = ABCMeta并没有做到这一点,因为它值得。

1 个答案:

答案 0 :(得分:3)

metaclass=ABCMeta 问题。 MutableSequence使用ABCMeta作为其元类,Pile正在使用其他内容,因此发生冲突。

您可以做的是继承Pile并使用MutableSequence.register(),如下所示:

class Thing(urwid.Pile):
    ...

collections.abc.MutableSequence.register(Thing)

如果Thing未实施所有必需的方法,您将无法获得例外,但issubclass(Thing, MutableSequence)isinstance(Thing(), MutableSequence)将返回True。