接口和 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的主要内容,如果未能解决你的问题,请参考以下文章

python-接口编写-get和post,真假接口

Python抽象类和接口类

python中的接口和依赖注入

QuantLib 金融计算——自己动手封装 Python 接口

python--学校管理系统(在学校接口上,增加了老师的管理接口和学生的管理接口)

Python接口自动化(二) 发送post请求的接口;python中字典和json的区别