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

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值