编程语言
首页 > 编程语言> > Python ABC多重继承

Python ABC多重继承

作者:互联网

我认为代码比用文字可以更好地解释问题.这是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: 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

我明白,我可以从我的界面MyABC直接继承创建一个类,然后创建另一类则来自这个班,我创造,我的第三方模块类继承.

我的问题是:是否有另一种更好,更适当的方法直接进行此操作,而无需为我的目的创建中间类?

解决方法:

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

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

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

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

标签:python-2-7,metaclass,multiple-inheritance,urwid,python
来源: https://codeday.me/bug/20191028/1953726.html