当前位置: 首页 > news >正文

Python 中的多态,不止是“重写”——聊聊鸭子类型与动态协议

一、传统多态 vs Python 多态

在编译型语言(如 Java)中,多态通常通过继承 + 方法重写(override)和方法重载(overload)来实现。编译器会在编译期检查方法签名,确保子类正确覆写了父类方法,或者同一个类中有多个同名但参数不同的方法。

但在 Python 中,没有方法重载(同名方法只能有一个),也不强制子类重写父类方法。那么 Python 的多态体现在哪里?

其实,Python 更关注对象的行为,而不是对象的类型。只要一个对象拥有某个方法,我们就可以调用它——这就是鸭子类型(Duck Typing):“如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子。”

二、代码实战:一个函数,多种飞翔

class Bird: def fly(self): print("鸟在飞") class Airplane: def fly(self): print("飞机在飞") class Dog: def fly(self): print("狗在飞(哈哈,被抛起来的)") class Cat: pass # 没有 fly 方法 def start_flying(obj): obj.fly() # 只要对象有 fly() 即可,不关心类型 start_flying(Bird()) # 鸟在飞 start_flying(Airplane()) # 飞机在飞 start_flying(Dog()) # 狗在飞 # start_flying(Cat()) # 报错 AttributeError,因为 Cat 没有 fly

三、专业术语解析

  • 运行时多态(Runtime Polymorphism):方法调用在运行时才确定具体调用哪个实现,Python 天生如此。

  • 协议(Protocol):在 Python 中,协议是一种非正式接口,例如“可迭代协议”要求实现__iter__,“上下文协议”要求实现__enter____exit__fly方法也是一种自定义协议。

  • 动态类型(Dynamic Typing):变量无需声明类型,解释器在运行时检查对象是否有对应属性。

  • EAFP(Easier to Ask for Forgiveness than Permission):Python 编程风格——直接尝试调用,如果出错再捕获异常,而不是事先用isinstance检查类型。

四、与多态相关的代码补充

在提供的86.多态.py中,还演示了在同一个类内通过*args模拟方法重载,以及子类重写父类方法的经典方式:

class Person: def get_info(self, *args): # 可变参数实现“多参”效果 for p in args: print(p) class SupperPerson(Person): def get_info(self): # 重写父类方法 return self.__str__()

这种方式虽然不像真正的重载那样严谨,但足够灵活,满足业务需求。

五、总结

  • Python 的多态不依赖继承体系,而是依赖对象是否实现了所需的方法

  • 鸭子类型让代码更简洁、更通用,但也需要开发者对“协议”有清晰认知。

  • 编写函数时,尽量接受“任意对象”,只要求它具备某些方法,这样代码复用性更高。

下篇预告:如何强制子类实现某个方法?抽象基类(ABC)来帮忙。

http://www.jsqmd.com/news/1358044/

相关文章:

  • 二层网络环路与广播风暴:从原理到排查与STP防护详解
  • 化工腐蚀性液体灌装机定制 - 中媒介
  • hermes使用OpenCode Go订阅模型慢?本地curl_cffi代理一招搞定
  • AI赋能测试:Test-Master Skills如何重塑测试工程师的工作流
  • Java+微信小程序实现智能会议室管理系统
  • 从零上手Claude Code:Node.js环境配置、API Key获取与核心使用指南
  • 游戏专用调度器:基于eBPF和Rust的低延迟优化实践
  • 2026AI检索变局:为什么传统营销失效?GEO生成式优化落地逻辑与避坑指南
  • 想租赁临时办公用的数码设备 - 中媒介
  • Java异常处理机制:从原理到最佳实践
  • Vibe Coding:提升开发效率与愉悦感的双轨实践指南
  • PYTHON+AI LLM DAY ONE HUNDRED AND THIRTY-ONE
  • Goldberg Steam Emulator技术深度解析:构建无需Steam的局域网游戏环境实战指南
  • 日本求职SPI测试全解析:从适应性测评原理到高效备考策略
  • 机房加湿设备哪家效果好? - 中媒介
  • Kimi K3大模型技术解析:从核心能力到本地部署与API集成实践
  • word怎么压缩到10M以下?PDF与文档压缩工具盘点,覆盖图片瘦身、格式转换与在线轻量处理
  • 终极农历公历转换指南:3步掌握传统文化数字化开发
  • 健身器材整体采购哪家推荐? - 中媒介
  • 高校班级管理系统全栈开发:微信小程序+Spring Boot实战
  • DeepSeek论文降AI率实战:从85%降至15%的核心方法
  • 深圳防护用品生产哪家规模大? - 中媒介
  • Pelican基准测试:评估AI模型真实能力的核心工具与实践指南
  • Seraphine深度解析:基于LCU API的英雄联盟数据集成框架如何重构游戏体验
  • 教小白安装rocky10linux系统
  • 专科生必备:9款AI时代高效办公工具测评
  • 分布式锁核心原理与高并发实践指南
  • Unity游戏窗口防拉伸变形:Windows API底层拦截实现完美宽高比限制
  • 高性能数据处理架构:从TB级吞吐优化到实战经验
  • 桂林法式早餐酒店哪家效果好? - 中媒介