如何解决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 继承,这些人可能更好地解释了这一点:
- 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
因此,根据您想对子类字典执行的操作,您可以使用 MutableMapping 中建议的 https://stackoverflow.com/a/3387975/14536215 或 UserDict(它是 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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。