我认为代码比我用文字能更好地解释问题。这是 my_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 继承的类,然后创建另一个类,然后该类继承我创建的这个类和我的第三方模块类。
我的问题是:是否有另一种更好、更正确的方法可以直接执行此操作,而无需为我的目的创建中间类?
The SomeClass
类有一个自定义元类。您将需要创建一个继承自两者的元类ABCMeta
和这个自定义元类,然后将其用作元类MyClass
。如果不了解有关此自定义元类的更多信息,我无法确定在一般情况下执行此操作的正确方法,但它可能看起来像以下可能性之一:
class DerivedMeta(ABCMeta, type(SomeClass)):
pass
class DerivedMeta(type(SomeClass), ABCMeta):
pass
虽然不太可能,但有可能您还需要重写一个或多个方法以确保正确的元类交互。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)