python ABC 和多重继承
python ABC & Multiple Inheritance
我想知道是否可以在 python 中使用抽象基础 class 的多重继承。看起来应该是可能的,但找不到任何一种说法。
基本 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”也从其他一些单独的 class 继承。明确地:
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”来实现“你好”?
问题在于从字典继承,这些人可能更好地解释了这一点:
- 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 as suggested in or with 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()
我想知道是否可以在 python 中使用抽象基础 class 的多重继承。看起来应该是可能的,但找不到任何一种说法。
基本 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”也从其他一些单独的 class 继承。明确地:
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”来实现“你好”?
问题在于从字典继承,这些人可能更好地解释了这一点:
- 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 as suggested in or with 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()