python ABC & 多重继承

问题描述

我想知道是否可以在python中使用带有抽象基类的多重继承。看起来应该是可能的,但无法以一种或另一种方式找到声明。

基本的 ABC 示例:


from abc import ABC,abstractmethod


class BaseABC(ABC):

    @abstractmethod
    def hello(self):
        pass


class Child(BaseABC):
    pass


child = Child()

这将失败,因为“hello”没有在“Child”中实现。

我想知道如何将ABC与多重继承结合起来。我想让“BaseABC”或“Child”也从其他一些单独的类继承。明确:


from abc import ABC,abstractmethod


class BaseABC(ABC,dict):

    @abstractmethod
    def hello(self):
        pass


class Child(BaseABC):
    pass


child = Child()

这不会像第一种情况那样以预期的方式失败。还有:


from abc import ABC,abstractmethod


class BaseABC(ABC):

    @abstractmethod
    def hello(self):
        pass


class Child(BaseABC,dict):
    pass


child = Child()

这也不会失败。我怎样才能要求“孩子”来实现“你好”?

解决方法

问题在于从 dict 继承,这些人可能更好地解释了这一点:

因此,根据您想对子类字典执行的操作,您可以使用 MutableMapping 中建议的 https://stackoverflow.com/a/3387975/14536215UserDict(它是 MutableMapping 的子类),例如:

from abc import ABC,abstractmethod
from collections import UserDict


class BaseABC(ABC):

    @abstractmethod
    def hello(self):
        pass

class Child(BaseABC,UserDict):
    pass


child = Child()