2014-09-13 1 views
1

내 클래스 중 하나에 PIL 모듈의 클래스 이미지를 전달하려는, 그래서 자연스럽게 쓴 :Python3 PIL 이미지 모듈과 메타 클래스

import sys 
from PIL import Image 
from PyQt4 import QtCore, QtGui 


class BitsWindow(QtGui.QWidget, Image): 

하지만이 오류를 얻을 :

클래스를 BitsWindow (QtGui.QWidget, 이미지) : 형식 오류 : 메타 클래스 충돌 : 나는 그물 몇 가지 답변을 읽고

파생 클래스의 메타 클래스는 모든 기지의 메타 클래스의 (비 엄격한) 서브 클래스해야합니다 이 오류에 대해서는 알고 있지만 실제로 이해하지는 못합니다. 물방울

답변

1

Image을 나는 QT 클래스 내가 PIL 클래스를 사용하려고 동일한 방법을 사용하여 아무런 문제가없는 이유 ... 얻을

많은 감사하지 않는 것은 모듈이 아닌 클래스입니다.

In [126]: type(Image) 
Out[126]: module 

클래스는 type에서 파생 된 것입니다. Imagetype에서 파생되지 않습니다

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)도 서로 서브 클래스가 아니기 때문에 오류가 발생합니다.

+0

Image가 PIL 모듈의 클래스라고 생각했습니다. 클래스 내부에서 모듈을 사용하려면 어떻게해야합니까? 내 수업은 PIL과 Image에 대해 잘 모르는 것처럼 보입니다.하지만 외부에서는 문제가 없습니다. –

+0

클래스 외부에서와 같은 방법으로 이미지 모듈을 사용할 수 있습니다. – unutbu

+0

좋아, 뭔가 확실히 내 코드의 다른 어딘가에, 나는 지금 어디서 (안), 설명 주셔서 대단히 감사합니다 :) –