python ABC和多重继承

标签 python multiple-inheritance abc

我想知道是否可以在python中对抽象基类使用多重继承。似乎应该有可能,但无法以一种或另一种方式找到一条语句。
基本的ABC示例:


from abc import ABC, abstractmethod


class BaseABC(ABC):

    @abstractmethod
    def hello(self):
        pass


class Child(BaseABC):
    pass


child = Child()

由于未在“子级”中实现“hello”,因此将失败。
我想知道如何将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()

这也不会失败。我如何要求“ child ”实现“你好”?

最佳答案

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

  • https://treyhunner.com/2019/04/why-you-shouldnt-inherit-from-list-and-dict-in-python/
  • http://www.kr41.net/2016/03-23-dont_inherit_python_builtin_dict_type.html

  • 因此,几乎不需要处理子类dict,就可以按照MutableMappinghttps://stackoverflow.com/a/3387975/14536215(MutableMapping的子类)中的建议使用UserDict,例如:
    from abc import ABC, abstractmethod
    from collections import UserDict
    
    
    class BaseABC(ABC):
    
        @abstractmethod
        def hello(self):
            pass
    
    class Child(BaseABC, UserDict):
        pass
    
    
    child = Child()
    

    关于python ABC和多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66173332/

    相关文章:

    python - 用于获取笔记本的 Jupyter Notebook API

    javascript - 合并两个对象但保持继承

    vb.net - VB .Net 中是否可以进行多重继承?

    python - 为什么 abc.ABCMeta 抽象实例化检查不适用于 `list` 和 `dict` 的衍生物?

    python - 检查元素是否是邻居,然后创建一个新列

    Python 正则表达式 : Matching from end of string (reverse)

    python - 模块可以像对象一样具有属性吗?

    python - 为多个类创建调用函数

    c++ - *您*使用 C++ ABC 构造函数做什么?

    python - 为什么在元类派生自ABCMeta的类中需要使用@abstractmethod?