python - 如何从 ABC 和另一个类继承
问题描述
我有一堂课
class A(ABC):
@abstractmethod
def m():
pass
和一堆继承自它的类。
class M1(A):
...
class M2(A):
...
...
其中一些有很多共同点,因为它们共享很多功能,因此我想介绍一个本身继承自的通用基类A
,但它没有引入任何新@abstractmethod
方法:
A
|
+----+----+
| | |
M1 M2 B
|
+--+--+
| |
K1 K2
的定义应该是什么class B
样的?
我在 Python 3.8
编辑:我特别问 PyCharm 告诉我“B 必须继承所有抽象方法”
解决方案
你可以简单地使用
class B(A):
pass
或所有儿童通用但没有m
. 由于没有 ,这仍然是抽象的m
。
另一种方法是使用
class B(A, ABC):
pass
在我看来,这不太好。这表明 thatB
既是 anA
又是 an ABC
,而前一种替代表明 thatB
是 an A
,并且它是 an 和an本身ABC
一样。A
ABC
考虑一下您稍后决定的情况,毕竟这A
不是。ABC
对于M1
和M2
,无需进行任何更改。对于B
,您现在还需要删除它的存在ABC
。虽然确保在子类A
化B
中同步ABC
并不会造成代码维护方面的巨大开销,但我认为这确实表明设计存在问题,尽管 PyCharm 对前一种替代方案发出了警告(我会将其视为误报)。
推荐阅读
- c++ - 调试外部 CMake 项目(hunter_add_package)?
- java - 如何调用从 Java 代码返回 TABLE 类型的 postgresql 函数?
- python - 从一组文档中,如何在 python 中为 Mapreduce 计算单词、文档数和计数
- xml - 使用 Dart XML 自定义关闭标签 -
- c# - 如何摆脱此错误:并非所有代码路径都返回值
- css - 将选择样式应用于开槽元素?
- eclipse - 尝试从当前的过去 5 个工作日内在 android 应用程序中自动化 1 个测试场景(跳过周六、周日、固定假期)
- python-3.x - 使用 numpy 从数组创建矩阵
- google-cloud-platform - Gcloud 将图像推送到错误/旧项目
- python - 错误:无法导入“flask_sqlalchemy”