我有一个问题,我想使用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
并没有做到这一点,因为它值得。
答案 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。