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没有达到目的,无论其价值如何。
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。
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |