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

三重继承会导致元类冲突...有时,第1张

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

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

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

class metaA(type):    passclass metaB(type):    passclass A:    __metaclass__ = metaAclass 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):    passclass Fixed(A, B):    __metaclass__ = metaAB

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

记住,你的继承类只得到 一个
两元类的。

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5630170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存