错误消息表明您在层次结构中的某个位置有两个冲突的元类。您需要检查每个类和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__以某种方式调用两者的方法,以帮助他们相处。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)