为何Python允许在抽象基类中实现本应由派生类重写的抽象方法?
Python抽象基类中抽象方法允许编写实现的原因
Python里给抽象基类(ABC)的抽象方法写实现,本质是在「强制派生类必须自定义方法」的前提下,给子类提供可复用的基础逻辑,主要有这几个实际用处:
- 减少重复代码:如果多个子类都需要执行一段相同的基础操作,把这段逻辑写在基类的抽象方法里,子类重写时只需要调用
super()复用这段逻辑,再补充自己的扩展代码就行,不用每个子类都从头写一遍。 - 兼顾强制约束与灵活性:抽象方法的核心作用是强制所有子类必须实现这个方法(不然子类没法实例化),但这并不意味着基类不能提供基础逻辑。子类必须重写,但重写时可以选择借力基类的实现,而非完全从零开始。
- 统一接口下的分层逻辑:基类可以把通用逻辑封装在抽象方法实现中,子类专注于实现各自的差异化逻辑,既保证了所有子类都遵循统一的接口规范,又能复用通用代码。
对应的示例代码如下:
from abc import ABC, abstractmethod class AbstractClassExample(ABC): @abstractmethod def do_something(self): print("Some implementation!") class AnotherSubclass(AbstractClassExample): def do_something(self): super().do_something() print("The enrichment from AnotherSubclass") x = AnotherSubclass() x.do_something()
这段代码里,基类的do_something加了@abstractmethod,所以子类AnotherSubclass必须重写这个方法才能实例化。子类重写后,通过super().do_something()调用了基类的实现,再加上自己的打印逻辑,既满足了抽象类的强制要求,又复用了基类的代码。
内容的提问来源于stack exchange,提问作者madhur
相关产品推荐
相关产品推荐

