我想在我的一个班级中传递PIL模块的类Image,所以我自然写了:
import sys
from PIL import Image
from PyQt4 import QtCore, QtGui
class BitsWindow(QtGui.QWidget, Image):
但是我收到了这个错误:
class BitsWindow(QtGui.QWidget,Image): TypeError:元类冲突:派生类的元类必须是其所有基类的元类的(非严格)子类
我已经在网上看到了关于这个错误的一些答案,但是我并没有真正理解这一点而且我不知道为什么我使用QT类没有问题,就像我尝试使用PIL类一样...
非常感谢 团块
答案 0 :(得分:1)
Image
是一个模块,而不是一个类。
In [126]: type(Image)
Out[126]: module
类是从type
派生的。 Image
不是来自type
:
In [128]: type(Image).__mro__
Out[129]: (module, object)
因此,您无法将其用作基类:
In [127]: class BitsWindow(Image): pass
...
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
您看到的错误,
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
表示类的所有基类必须具有相同的元类,或者至少必须有元类的顺序,使得每个类都是下一个的子类。一个派生类不能继承两个元类,这是有道理的,因为每个类都是其元类的一个实例。
在您的特定情况下,会引发错误,因为type(Image)
和type(QWidget)
都不是彼此的子类。