Python. 我在多重继承中遇到了错误

3
我所要做的就是从两个不同的类中继承。
from traits.api import HasTraits
from PyQt4 import QtCore, QtGui, uic
class Main_Excel_Class(HasTraits,QtGui.QMainWindow):
   pass

最初我遇到了 "元类冲突: 派生类的元类必须是其所有基类的元类的(非严格)子类" 的错误。但是,我通过添加一个__metaclass__属性解决了这个问题:

from traits.api import HasTraits
from PyQt4 import QtCore, QtGui, uic

class Main_Excel_Class_Meta(type(HasTraits), type(QtGui.QMainWindow)):
     pass   

class Main_Excel_Class(HasTraits,QtGui.QMainWindow):
      __metaclass__ = Main_Excel_Class_Meta

但现在我最终得到了
"TypeError: Error when calling the metaclass bases
multiple bases have instance lay-out conflict"

错误。我尝试查看其他类似的问题,但实际上并没有理解很多。希望能提供一些解决此问题的方法。谢谢。

1个回答

8

我通过一些研究最终解决了这个问题。显然,错误与__slots__属性的冲突有关,该属性在为新类型分配堆内存时使用。以下是我所做的更改:

from traits.api import HasTraits
from PyQt4 import QtCore, QtGui, uic

class Main_Excel_Class_Meta(type(HasTraits), type(QtGui.QMainWindow)):
 pass   

class HasTraits(QtGui.QMainWindow):
    pass

class Main_Excel_Class(HasTraits):
    __metaclass__ = Main_Excel_Class_Meta

为了更好地理解工作原理,我建议您查看此帖子:

http://mcjeff.blogspot.in/2009/05/odd-python-errors.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接