Python3 PIL IMAGE 模块和元类
Posted
技术标签:
【中文标题】Python3 PIL IMAGE 模块和元类【英文标题】:Python3 PIL IMAGE module and metaclass 【发布时间】:2014-11-07 15:04:02 【问题描述】:我想在我的一个类中传递PIL模块的类Image,所以我很自然地写了:
import sys
from PIL import Image
from PyQt4 import QtCore, QtGui
class BitsWindow(QtGui.QWidget, Image):
但我收到此错误:
类 BitsWindow(QtGui.QWidget, Image): TypeError:元类冲突:派生类的元类必须是其所有基类的元类的(非严格)子类
我已经在网上阅读了一些关于这个错误的答案,但我并没有真正明白,我不明白为什么我使用 QT 类没有问题,就像我尝试使用 PIL 类一样......
非常感谢 斑点
【问题讨论】:
【参考方案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)
都不是彼此的子类。
【讨论】:
我认为 Image 是模块 PIL 的一个类。那么我们如何在类中使用模块呢?看来我的班级不知道 PIL 和 Image,不过没问题 你可以像在课堂外一样在课堂内使用 Image 模块。 好的,那么我的代码中的其他地方肯定有问题,我现在知道(不)在哪里看,非常感谢您的解释:)以上是关于Python3 PIL IMAGE 模块和元类的主要内容,如果未能解决你的问题,请参考以下文章