「IT培训教程」Python开发基础系列:多态
先看下面的代码:
class Animal: def kind(self): print("i am animal")class Dog(Animal): def kind(self): print("i am a dog")class Cat(Animal): def kind(self): print("i am a cat")class Pig(Animal): def kind(self): print("i am a pig")# 这个函数接收一个animal参数,并调用它的kind方法def show_kind(animal): animal.kind()d = Dog()c = Cat()p = Pig()show_kind(d)show_kind(c)show_kind(p)------------------打印结果:i am a dogi am a cati am a pig
狗、猫、猪都继承了动物类,并各自重写了kind方法。show_kind()函数接收一个animal参数,并调用它的kind方法。可以看出,无论我们给animal传递的是狗、猫还是猪,都能正确的调用相应的方法,打印对应的信息。这就是多态。
实际上,由于Python的动态语言特性,传递给函数show_kind()的参数animal可以是 任何的类型,只要它有一个kind()的方法即可。动态语言调用实例方法时不检查类型,只要方法存在,参数正确,就可以调用。这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。
class Job: def kind(self): print("i am not animal, i am a job")j = Job()show_kind(j)
可能有人会觉得,这些内容很自然啊,没什么不好理解,不觉得多态有什么特殊,Python就是这样啊!
如果你学过JAVA这一类强类型静态语言,就不会这么觉得了,对于JAVA,必须指定函数参数的数据类型,只能传递对应参数类型或其子类型的参数,不能传递其它类型的参数,show_kind()函数只能接收animal、dog、cat和pig类型,而不能接收job类型。就算接收dog、cat和pig类型,也是通过面向对象的多态机制实现的。
以上就是Python多态的详解,私信回复【领资料】,免费领取Python编程全套学习资料,包含全套视频教程、项目源码、学习路i线图等,赶快私信吧
举报/反馈
上一篇:巴彦淖尔、呼和浩特、赤峰、包头等地招聘教师、事业单位人员汇总
下一篇:云知声受邀出席第三届电力人工智能大会暨电力行业数字化转型大会
最近更新教育管理
- 德州市社保中心组织开展12333社保咨询日及服务体验活动
- 郁亮关于房地产的最新判断
- 新sat写作多长时间
- 中超最新积分榜:山东泰山稳居第2,距离榜首只差5分!三镇升6
- 拒绝教师“躺平”,湖北一地出招
- 九江市人社局精准服务推动高校毕业生高质量就业
- 逢八秩晋五·续摇篮华章 ——西安市第一保育院学术讨论暨摇篮课程成果分享活动
- 奇安信集团总裁吴云坤赴南京信息工程大学交流座谈
- “重礼兴乐”涵育师生家国情怀
- 上汽大众途观L(Tiguan L)和探岳怎么选?看完这篇就有答案
- 我省严禁艺考考点院校参与应试培训活动
- 深度介入基础设施建设,推动人才培养与人文交流 十年大手笔!江苏高校同绘丝路画卷
- 行而不缀,未来可期
- 大量编内!福建多家好单位招人!
- 首届川渝“巴蜀杯”中学生排球联赛开赛
- 平安产险重庆分公司开展2023年金融消费者权益保护教育宣传月“五进入”活动
- 湖南娄底:全面优化项目建设环境
- 辽宁科技大学材料与冶金学院开展新生入学教育系列活动
- 明年起,江苏开设6类艺术类省统考
- 我真的很棒——合肥市荣幼教育集团开展幼小衔接活动
- 快看:首列车亮相,郑州这两条地铁新进展来了!
- 推动农业绿色发展 淄博打开农民增收“新密码”
- sat阅读填空题的答题方法
- 主题教育|枣庄市司法局采取有力措施 确保主题教育高质高效推进
- 昆明市工会驿站普惠日活动启动