我认为代码会比我用语言更好地解释问题。这是在我的_abc.py中的代码:
from abc import ABCMeta, abstractmethod
class MyABC(object):
__metaclass__ = ABCMeta
@abstractmethod
def print(self):
pass
这是我在my_class.py中的代码
from my_abc import MyABC
from third_party_package import SomeClass
class MyClass(MyABC, SomeClass):
def __init__(self):
super(MyClass, self).__init__()
def print(self):
print('Hello ABC')
当我尝试运行my_class.py时,出现以下错误:
TypeError: 调用元类基类时出错:元类冲突:派生类的元类必须是其所有基类的元类的(非严格)子类
我理解可以创建一个直接从我的接口MyABC继承的类,然后创建另一个类同时继承我创建的这个类和第三方模块的类。
我的问题是:是否有其他更好、更适当的方法可以直接完成此操作,而无需为此创建中间类?
MyABC
和MyClass
之间加入另一个类,我会预期你会遇到完全相同的问题。问题在于SomeClass
具有不同且不兼容的元类。如果不知道它是什么,我不确定是否有任何回答这个问题的方法。你能添加一些关于SomeClass
的具体细节吗? - Blckknghtclass MyMeta(ABCMeta, type(SomeClass)): pass
,然后将其用作MyClass
的__metaclass__
。 - user4815162342