Python中的接口

接口(interface)

接口, (按照我自己的理解)最接地气的定义是: 实体向外暴露的公共可访问方法与属性. 这个实体可以是Class, Object, Software等任意可以看成一个整体的东西. 外界通过它们的interface与它们进行交互.
按照Wikipedia的说法, 接口与协议(Protocol)是同义词, 因为接口在定义交互方式的同时肯定也定义了交互时的通信内容, 格式等.

Interface: Java vs. Python

Java里的Interface是一种特殊的类. 要兼容某种协议, 就要implements相应的interface. 例如, 序列化协议Serializable, 比较/排序协议Comparable.

而在Python里, 不是通过implements接口类来兼容特定协议, 而是只需通过实现特定的方法. 例如, 只需要实现__getitem__方法, 就可以支持索引操作: obj[idx], 实现__hash__方法就可以支持Hash操作.

用Fluent Python里的话来讲, 要判断一个动物是不是鸭子, Java看的是它的血统: 是否实现了鸭子接口, 是一个鸭子实例; Python则是看它的行为: 是否像鸭子一样走路, 一样叫发声.

Java是静态类型语言, 在编译时就可以通过类型检查知道某调用是否合法, 例如是否可序列化. Python是动态类型语言, 加上可在运行时给Object/Class动态添加方法/属性(即Monkey Patching), 在运行时才能知道调用是否合法.

存在差异, 优劣之分则是乐山乐水.


修正

Java是强类型语言… Python是弱类型语言
已经修改。

感谢@计算机动物 的指正, 查了资料才发现本人之前理解的强弱类型概念是错误的。

  • 对隐式类型转换的容忍程度—> 强弱类型
  • 定义变量时是否需要指定数据类型 —> 动态与静态类型
    C和C++是静态的弱类型
    Python是动态的强类型
    Java是动态的强类型

https://www.zhihu.com/question/19918532

你可能感兴趣的:(Python)