「IT培训教程」Python开发基础系列:多态

栏目:教育管理  时间:2023-03-12
手机版

  

  先看下面的代码:

  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线图等,赶快私信吧

  举报/反馈

上一篇:巴彦淖尔、呼和浩特、赤峰、包头等地招聘教师、事业单位人员汇总
下一篇:云知声受邀出席第三届电力人工智能大会暨电力行业数字化转型大会

最近更新教育管理