【发布时间】:2018-11-08 17:56:13
【问题描述】:
我正在使用abc 模块来定义子类必须支持的接口。所有子类中还存在一些通用方法。可以将它们放在抽象类中还是应该只包含抽象方法(即用@abc.abstractmethod装饰)?
【问题讨论】:
-
通常接口和抽象类的区别在于接口没有字段,也没有实现任何方法。这两个概念都是有用的,具体取决于上下文。但是在 Python 中并没有明显的区别。但是在抽象类中实现方法并没有错。
-
这样做有什么好处而不是使用
raise NotImplementedError? -
@RockyLi 是的,继承自抽象类的类必须实现其所有抽象方法。
-
绕过这个要求是微不足道的(
abc是一个库,而不是一个语言特性),但它仍然可以作为很好的文档和防止简单地忘记实现抽象方法的第一道防线。 -
另外,将所有子类都应该可以访问的通用方法放在基类中是标准的OO实践,与基类是否抽象无关
标签: python inheritance abstract-class