接口和Python

3
我对Python3和接口进行了一些搜索,似乎找不到直接的答案,是否使用接口符合Pythonic的原则。我知道Python允许mixins,并且支持鸭子类型。然而,实现接口需要满足一组“要求”。那么,在Python3中,如何看待接口呢? 如果接口符合Pythonic的原则,那么最佳实现方式是什么?

Python没有(也不需要)正式的接口合同。 - OneCricketeer
3
我一直认为它们是将Java编程范式引入Python的一种方式。因此,我并不认为它们具有Pythonic的特点。 - Klaus D.
查找“鸭子类型”。接口与许多其他语言不同。 - martineau
@martineau 感谢您帮助我修正了我描述问题的方式。 - Taztingo
1
不用谢。由于鸭子类型和你在问题中提到的其他一些原因,Python 不会从对象的类型确定适当性—也不提供显式语言支持协议或接口,因此在 Python 中使用它们的实践并不普遍(这也是为什么你找不到很多关于它们的信息)。请参阅维基百科上有关“鸭子类型”的文章中的“协议和接口”章节。 - martineau
1个回答

1

虽然Python 2和3通过名义子类型(mixins)和抽象基类支持这种类型的功能,但如果您使用类型注释,则PEP 544引入了静态鸭子类型的概念,其中Protocol定义了子类型的接口(可选包括属性和方法的默认实现)。类似于Swift协议或Java接口。

您可以通过导入typing-extensions模块,在所有Python版本中(除了3.5.0)使用Protocols。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,