除了某种文档目的之外,我找不到它们的太多优势。如果我忘记实现我在 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/