PythonABC多重继承 [英] Python ABC Multiple Inheritance

查看:0
本文介绍了PythonABC多重继承的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我认为代码可以比文字更好地解释这个问题。以下是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继承的类,然后创建另一个类,然后从我创建的这个类和我的第三方模块类继承。

我的问题是:有没有其他更好、更合适的方法来直接完成此操作,而不必为我的目的创建中间类?

推荐答案

SomeClass类有一个自定义元类。您需要创建一个继承自ABCMeta和此自定义元类的元类,然后将其用作MyClass的元类。如果不更多地了解此自定义元类,我无法确定在一般情况下执行此操作的正确方法,但它可能看起来像是以下可能性之一:

class DerivedMeta(ABCMeta, type(SomeClass)):
    pass

class DerivedMeta(type(SomeClass), ABCMeta):
    pass

这不太可能,但您还可能需要重写一个或多个方法以确保正确的元类交互。

这篇关于PythonABC多重继承的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆