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

dwf*_*dwf 0 python metaclass multiple-inheritance python-3.x

我遇到一个问题,我想使用 的 mixin 方法collections.abc.MutableSequence,但我还必须从其他方法继承。

class Thing(urwid.Pile, collections.abc.MutableSequence):
    ...
Run Code Online (Sandbox Code Playgroud)

我最终得到

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

我如何确定发生了什么并解决它?metaclass = ABCMeta没有达到目的,无论其价值如何。

And*_*ini 5

metaclass=ABCMeta 问题所在。MutableSequence用作ABCMeta其元类,Pile正在使用其他东西,因此会发生冲突。

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

class Thing(urwid.Pile):
    ...

collections.abc.MutableSequence.register(Thing)
Run Code Online (Sandbox Code Playgroud)

Thing但是,如果您没有实现所有必需的方法,您不会得到异常,issubclass(Thing, MutableSequence)并且isinstance(Thing(), MutableSequence)会返回 True。