Python面向对象之多态和鸭子类型
【一】多态
【1】什么是多态
- 多态指的是一类事物有多种形态
【2】示例
- 比如动物有多种形态:猫、狗、猪
- 文件有多种形态:文本文件,可执行文件
【二】多态性
【1】什么是多态动态绑定(多态性)
- 多态动态绑定在继承的背景下使用时,有时也称为多态性
- 多态性是指在不考虑实例类型的情况下使用实例
- 在面向对象方法中一般是这样表述多态性:
- 向不同的对象发送同一条消息(!!!obj.func():是调用了obj的方法func,又称为向obj发送了一条消息func)
- 不同的对象在接收时会产生不同的行为(即方法)。
- 也就是说,每个对象可以用自己的方式去响应共同的消息。
- 所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
- 比如:老师.下课铃响了(),学生.下课铃响了()
- 老师执行的是下班操作
- 学生执行的是放学操作
- 虽然二者消息一样,但是执行的效果不同
【2】多态性的分类
- 多态性分为静态多态性和动态多态性
(1)静态多态性
- 如任何类型都可以用运算符 + 进行运算
(2)动态多态性
- Python中一切皆对象,本身就支持多态性
【3】为什么要用多态性(多态性的好处)
-
增加了程序的灵活性
- 以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
-
增加了程序额可扩展性
- 通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
-
这样我们新增了一个形态Cat,由Cat类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。
-
使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1)
【三】鸭子类型
【1】什么是鸭子类型 duck-typing
- 鸭子类型是一种编程风格,决定一个对象是否有正确的接口
- 关注点在于它的方法或属性
- 而不是它的类型(
如果它看起来像鸭子,像鸭子一样嘎嘎叫,那么它一定是鸭子。
)。
- 通过强调接口而不是特定类型,设计良好的代码通过多态提高了灵活性。
- 鸭子类型无需使用
type()
或isinstance()
进行检查(注意,鸭子类型可以用抽象基类来补充) - 相反,它通常使用
hasattr()
来检查,或是 EAFP 编程。
- 鸭子类型无需使用
- 但其实我们完全可以不依赖于继承,只需要制造出外观和行为相同对象,同样可以实现不考虑对象类型而使用对象,这正是Python崇尚的“鸭子类型”(duck typing):
- “如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子”。
- 比起继承的方式,鸭子类型在某种程度上实现了程序的松耦合度
__EOF__

本文作者:Fredette
本文链接:https://www.cnblogs.com/Fredette/p/17953048.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Fredette/p/17953048.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY