首页 > 解决方案 > Python 包含非空主体的抽象方法是否违反了预期的虚拟/抽象设计模式?

问题描述

我一直在阅读虚拟方法与抽象方法之间的区别。这是有据可查的。 虚拟方法和抽象方法之间的区别

虚拟方法有一个实现,并为派生类提供覆盖它的选项。

抽象方法不提供实现并强制派生类覆盖该方法。

因此,抽象方法中没有实际代码,子类必须覆盖该方法。

根据这些陈述,听起来用 装饰的方法abc.abstractmethod应该没有 implementation,只有pass, ...(用于abcdocs)或raise NotImplementedError.


似乎程序员通常abc.abstractmethod用来实现一个虚函数,其中重写是强制性的。这可以在很多地方看到:

然而,这似乎违背了没有主体的抽象方法的设计模式的定义。

这个答案很好地说明了主题。


我的观察是虚拟与抽象方法设计模式目前在 Python 中被松散地遵循。

任何人都可以阐明这一点吗?最佳做法是什么?

标签: pythonoopabstract-classcomputer-scienceabstract

解决方案


推荐阅读