您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

三重继承会导致元类冲突...有时

三重继承会导致元类冲突...有时

错误消息表明您在层次结构中的某个位置有两个冲突的元类。您需要检查每个类和QT类,以找出冲突的位置。

这是设置相同情况的一些简单示例代码

class MetaA(type):
    pass
class MetaB(type):
    pass
class A:
    __Metaclass__ = MetaA
class B:
    __Metaclass__ = MetaB

我们不能直接对这两个类进行子类化,因为python不知道要使用哪个元类

>>> class Broken(A, B): pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Error when calling the Metaclass bases
  Metaclass conflict: the Metaclass of a derived class must be a (non-strict)
  subclass of the Metaclasses of all its bases

错误试图告诉我们的是,我们需要通过引入第三个元类解决这两个元类间的冲突,这是基类中所有元类的子类。

我不确定是否比错误消息本身更清晰,但是基本上,您可以通过执行以下操作来修复它:

class MetaAB(MetaA, MetaB):
    pass

class Fixed(A, B):
    __Metaclass__ = MetaAB

现在,此代码可以编译并正确运行。当然,在实际情况下,您的解决冲突的元类将不得不决定采用哪种父元类行为,您必须根据应用程序的需求自行确定哪些行为。

记住,你的继承类只得到 一个元类的。__init__方法有时会完成所有工作,因此在许多情况下,您将不得不添加一个__init__以某种方式调用两者的方法,以帮助他们相处。

其他 2022/1/1 18:35:05 有423人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶