接口和 Python
Posted
技术标签:
【中文标题】接口和 Python【英文标题】:Interfaces and Python 【发布时间】:2017-06-29 12:33:03 【问题描述】:我对 Python3 和接口进行了一些搜索。我似乎无法找到关于它是 pythonic 还是不使用接口的直接答案。我知道 python 允许 mixins,并允许鸭子类型。但是,他们从实现接口中获得了一组“要求”。 Python3接口的决定是什么?
如果接口是pythonic,那么实现它们的最佳方式是什么?
【问题讨论】:
Python doesn't have (and doesn't need) a formal Interface contract 我一直认为它们是一种将 Java 范式引入 Python 的方法。因此我根本不认为它们是pythonic。 查找“鸭子打字”。界面与许多其他语言不同。 @martineau 感谢您帮助我解决了我描述问题的方式。 不客气。由于鸭子类型和您在问题中提到的其他一些原因,Python 不会确定对象类型的适用性——它也没有为协议或接口提供明确的语言支持——因此它们的实践并不普遍(以及为什么你没有找到很多关于它的信息)。请参阅Duck Typing 上的***文章中的Protocols and Interfaces 部分。 【参考方案1】:虽然 Python 2 和 3 通过 nominal subtyping (mixins) 和 abstract base classes 支持此类功能,但如果您使用类型注释,PEP 544 引入了 静态鸭子打字与Protocol
。与 Swift 协议或 Java 接口类似,Protocol
为子类型定义了一个接口(可选地包括属性和方法的默认实现)。
您现在可以通过导入 typing-extensions
模块在所有 Python 版本(3.5.0 除外)中使用协议。
【讨论】:
以上是关于接口和 Python的主要内容,如果未能解决你的问题,请参考以下文章
QuantLib 金融计算——自己动手封装 Python 接口