19、Python 协议:连接类型检查和运行时类型系统的桥梁

Python 协议:连接类型检查和运行时类型系统的桥梁

1. 子类型关系与注意事项

在编程里,子类型关系是个强大的概念,能在不修改现有功能的基础上对其进行扩展。不过,继承常被过度或不当使用。子类型只有在能直接替代其超类型时才应被使用,若无法替代,建议使用组合。

在引入超类型或子类型时要格外小心,开发者可能难以知晓与单个超类型关联的所有子类型,部分子类型或许存在于其他代码库中。超类型和子类型紧密耦合,所以每次进行更改时都需谨慎。只要谨慎对待,就能充分享受子类型带来的益处,避免诸多麻烦。

2. 类型系统的矛盾

Python 支持鸭子类型,即只要对象支持特定行为集,就能在相应上下文中使用该对象,无需任何父类或预定义的继承结构。然而,类型检查器在没有辅助的情况下,不知如何处理鸭子类型。类型检查器能处理静态分析时已知的类型,但对于运行时做出的鸭子类型决策却无能为力。

为解决这个问题,Python 3.8 引入了协议。协议能在类型检查时对鸭子类型的变量进行注释。在深入了解协议之前,得先明白 Python 的鸭子类型和静态类型检查器之间的差异。

以构建自动化午餐店的数字菜单系统为例,该餐厅有多种可“拆分”的菜品,如熟食三明治、卷饼和汤,但饮料和汉堡等则不能拆分。为避免代码重复,需要一个方法来处理所有的拆分操作。以下是一些菜品类的示例:

class BLTSandwich:
    def __init__(self):
        self.cost = 6.95
        self.name = 'BLT'
        # This 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值