栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

错误消息表明您在层次结构中的某个位置有两个冲突的元类。您需要检查每个类和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__
以某种方式调用两者的方法,以帮助他们相处。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624134.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号