概述

python是一门解释语言,但是同java等静态语言一样,是可以通过继承的方式实现多态。而且python还有一个自己的特殊实现多态的方法,就是通过鸭子类型,来实现多态。

继承多态

通过严格的继承父类,重写父类的方法实现多态

class Person(object):def __init__(self, name, work=None):self.name = nameself.work = Nonedef msg(self):# 重载父类的msg方法print('my name is ' + self.name)class Teacher(Person):def __init__(self, name, work='teacher'):super().__init__(name, work)def msg(self):print('my name is ' + self.name + ', my work is ' + self.work)class Coder(Person):def __init__(self, name, work='coder'):super().__init__(name, work)def msg(self):print('my name is ' + self.name + ', my work is ' + self.work)def show_msg(obj):obj.msg()if __name__ == '__main__':laowang = Person('laowang')lw_t = Teacher('lw')lw_c = Coder('wcy')# 这些都是通过继承方式,创建的新对象,# 严格有Person的所有属性和方法,所以这种多态很好理解show_msg(laowang)show_msg(lw_t)show_msg(lw_c)

鸭子多态

python独特的实现多态的方式,通过Duck Typing。简而言之,不继承父类Person,但是也拥有Person一样的方法或者属性。即看起来像,就行。

# 接着上面的代码接着写
class Animal(object):def msg(self):print('animal do not need work')
# 严格意义上,Animal并没有继承Person父类
# 但是它模仿了Person父类,实现了msg方法,看起来像鸭子而已
cat = Animal()# 所以由于python的解释性,将其定义为鸭子类型,同样实现了多态
show_msg(cat)

python多态和鸭子类型相关推荐

  1. Python多态、鸭子类型

    一.多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.ab ...

  2. Python多态与鸭子类型

    学习到多态的时候,不确定自己是否完全理解了python的多态,于是Google观看了众多资料和文献,发现很多编程大佬讲得过于抽象,不便于新手理解,这违背了python的初衷:简单. 所以我在此用通俗一 ...

  3. python 多态 协议 鸭子类型

    接口(python 中的协议)的多种不同的实现方式即为多态.多态的作用,就是为了类在继承和派生的时候,保证使用"家谱"中任一类的实例的某一属性时的正确调用. from abc im ...

  4. Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)

    1.创建类的代码: #在Java中,所有的最终父类都是Object #在python中也是,一个类没有直接的父类就写入objectclass Animal(object):#在python中init方 ...

  5. Python之多态与鸭子类型

    一.多态与多态性 多态指的是一类事物有多种形态,比如动物有多种形态:猫.狗.猪 class Animal: # 同一类事物:动物def talk(self):pass class Cat(Animal ...

  6. Python学习笔记——鸭子类型(duck typing)

    前言 在实习期间,由于工作需要首次接触了Python这门语言,由于学习和使用的时间非常短,所以当时认为,作为一门解释性语言,在做Web开发方面,Python和PHP的差别不大,甚至在一些应用场景上没有 ...

  7. Py测开《多态和鸭子类型的区别》

    目录 一.面向对象编程的三大特征 二.什么是多态 三.实现多态的步骤 1.Python中函数的参数是没有类型限制的 2.子类的对象是不是属于这个父类 3.实现伪多态 四.多态的意义 五.鸭子类型 1. ...

  8. 你知道什么是Python里的鸭子类型和猴子补丁吗?

    作者 |  梁云1991 来源 | Python与算法之美(ID:Python_Ai_Road) 有时候我们会听到Python里所谓的鸭子类型和猴子补丁的说法,乍一听还以为是来到了动物园,Python ...

  9. python中的鸭子类型

    浅层理解 走路像鸭子,说话像鸭子,它就是鸭子 深层理解 指的是面向对中,子类不需要显示的继承某个类,只要有某个的方法和属性,那我就属于这个类 编程语言中的鸭子类型说明 假设有个鸭子类Duck类,有两个 ...

最新文章

  1. [置顶]使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包...
  2. matlab噪声倍频带声压级,近海风电场水下打桩噪声传播特性
  3. ListView 异步更新出现问题的解决(Handler)
  4. vertical-align
  5. Redis序列化、RedisTemplate序列化方式大解读,介绍Genericjackson2jsonredisserializer序列化器的坑
  6. Scrapy Django项目
  7. 学习自然语言处理,一张图就够了
  8. 数据库开发——MySQL——数据类型——非数值类型
  9. 内存模型 C++ 和Java内存模型
  10. Sublime Text提示Unable to download XXX. Please view the console for more details安装插件失败解决
  11. pythonelectron桌面开发案例_使用Electron开发基于Node.js的桌面应用
  12. oracle加大内存对大表,在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能...
  13. 【华为云技术分享】KubeFlow-Pipeline及Argo实现原理速析
  14. Python入门基础之条件判断、循环、dict和set
  15. C++ new 的三种面貌
  16. 第三届泰迪杯数据挖掘技能赛一等奖总结经验分享
  17. 全球与中国纳米铝硅合金粉末市场深度研究分析报告
  18. 大规模MIP的精确算法和实现
  19. 【计算机网络】中国大学MOOC哈工大国家精品课局域网部分习题
  20. JavaScript实时监听歌曲播放进度显示对应歌词

热门文章

  1. 知识融合中几种计算文本相似度的方法(代码)
  2. 【Kubernetes快速实战】
  3. 希望三号GMSK遥测接收教程
  4. oracle中更新一列分组的均值,oracle 分组平均后又求平均值的方法
  5. Win7系统不同程序无法同时播放声音是怎么回事?
  6. 记录一下自己配置Tomcat(9.0.69)
  7. 使能树莓派无线上网和SSH登录
  8. 低代码助力生产管理:车间管理系统
  9. 必备模块知识——超声波传感器
  10. Selenium登录百度贴吧跳过图片验证的两种操作