python - 使用接口(interface)/抽象基类是pythonic吗?

标签 python interface abstract-class

除了某种文档目的之外,我找不到它们的太多优势。如果我忘记实现我在 ABC 中定义的方法,Python 会警告我,但由于我没有通过它们的接口(interface)引用我的对象,我可能会忘记在它们的接口(interface)中声明方法,而且我不会注意到它。 将 ABC 用于类似界面的行为是常见的做法吗?

最佳答案

就个人而言,我发现抽象类在编写一个开发人员与另一个开发人员之间的接口(interface)的库或其他代码时最有用。

静态类型语言的优点之一是当您使用错误的类型时,它会提前失败(通常早在编译时)。 ABC 允许 Python 通过动态类型获得同样的优势。

如果您的库代码 duck 键入了一个缺少重要方法的对象,它可能不会失败,直到需要该方法(这可能会花费大量时间或将资源置于不一致状态,具体取决于它的使用方式)。然而,对于 ABC,缺少的方法要么没有使用正确的 ABC(并且未通过 instanceof 检查),要么被 ABC“验证”。

此外,ABC 是记录接口(interface)的绝佳方式,无论是从概念上还是通过文档字符串,从字面上。

关于python - 使用接口(interface)/抽象基类是pythonic吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5283995/

相关文章:

java - 什么时候在 Java 接口(interface)中声明变量是正确的?

c# - 在 Ruby 中,什么相当于 C# 中的接口(interface)?

unit-testing - 是否可以测试这个 Kotlin 类?

python - 如何使用线程/多处理来防止程序挂起?

python - 如何计算范围而不是箱中的列值?

java - 如何获得一个类来实现这个gestureRecogniser?

c# - 用模板覆盖基类的抽象类

java - 抽象类可以有final方法吗?

python - 使用pyclutter编程

python - 多行中的 PyYAML 变量