Peewee模型和QtCore QObject的多重继承导致元类冲突

问题描述 投票:1回答:1

首先,我是python的新手,这是我的第一篇文章所以,请告诉我,如果我在这里做错了,我很乐意解决它。

我正在使用Python 2.7.15rc1和Peewee 3.6.4

我想要实现的是创建一个继承自peewee模型和PySide.QtCore的QObject的类。像这样:

class BaseModel(Model, QObject):

id = PrimaryKeyField()

class Meta:
    database = db  

def __str__(self):
    return str(self.__dict__)

def __eq__(self, other): 
    return self.id == other.id

但是这个配置给我带来了以下错误:

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

如果我尝试将Model指定为所需的元类(并且我认为它是可以的,因为基本上我只需要“与QObject的关系”是真的)通过将其添加到BaseModel:

__metaclass__ = Model

抛出以下错误:

AttributeError: 'Model' object has no attribute '_meta'

另外,通过关注这个link,我已将代码更改为:

class A (Model):
    pass
class B (QObject):
    pass
class C(A, B):
    pass

class BaseModel(A, B):

    __metaclass__ = C

    id = PrimaryKeyField()

    class Meta:
        database = db  

    def __str__(self):
        return str(self.__dict__)

    def __eq__(self, other): 
        return self.id == other.id

但是元类冲突仍然存在。

我在这附近做错了什么?

python python-2.x multiple-inheritance peewee
1个回答
0
投票

好。最后我通过这样做解决了这个问题:

class Metaclass_Model(Model.__class__):
    pass
class Metaclass_QObject(QObject.__class__):
    pass

class MultiMetaclass(Metaclass_Model, Metaclass_QObject):
    pass


class BaseModel(Model, QObject):

    __metaclass__ = MultiMetaclass

    id = PrimaryKeyField()

    class Meta:
        database = db  

    def __str__(self):
        return str(self.__dict__)

    def __eq__(self, other): 
        return other is not None and self.id == other.id

它工作正常,即使Eclipse一直显示此错误:

Undefined variable from import: __class__

在这一行:

class Metaclass_Model(Model.__class__):
© www.soinside.com 2019 - 2024. All rights reserved.