python多态和鸭子类型
概述
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多态和鸭子类型相关推荐
- Python多态、鸭子类型
一.多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.ab ...
- Python多态与鸭子类型
学习到多态的时候,不确定自己是否完全理解了python的多态,于是Google观看了众多资料和文献,发现很多编程大佬讲得过于抽象,不便于新手理解,这违背了python的初衷:简单. 所以我在此用通俗一 ...
- python 多态 协议 鸭子类型
接口(python 中的协议)的多种不同的实现方式即为多态.多态的作用,就是为了类在继承和派生的时候,保证使用"家谱"中任一类的实例的某一属性时的正确调用. from abc im ...
- Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)
1.创建类的代码: #在Java中,所有的最终父类都是Object #在python中也是,一个类没有直接的父类就写入objectclass Animal(object):#在python中init方 ...
- Python之多态与鸭子类型
一.多态与多态性 多态指的是一类事物有多种形态,比如动物有多种形态:猫.狗.猪 class Animal: # 同一类事物:动物def talk(self):pass class Cat(Animal ...
- Python学习笔记——鸭子类型(duck typing)
前言 在实习期间,由于工作需要首次接触了Python这门语言,由于学习和使用的时间非常短,所以当时认为,作为一门解释性语言,在做Web开发方面,Python和PHP的差别不大,甚至在一些应用场景上没有 ...
- Py测开《多态和鸭子类型的区别》
目录 一.面向对象编程的三大特征 二.什么是多态 三.实现多态的步骤 1.Python中函数的参数是没有类型限制的 2.子类的对象是不是属于这个父类 3.实现伪多态 四.多态的意义 五.鸭子类型 1. ...
- 你知道什么是Python里的鸭子类型和猴子补丁吗?
作者 | 梁云1991 来源 | Python与算法之美(ID:Python_Ai_Road) 有时候我们会听到Python里所谓的鸭子类型和猴子补丁的说法,乍一听还以为是来到了动物园,Python ...
- python中的鸭子类型
浅层理解 走路像鸭子,说话像鸭子,它就是鸭子 深层理解 指的是面向对中,子类不需要显示的继承某个类,只要有某个的方法和属性,那我就属于这个类 编程语言中的鸭子类型说明 假设有个鸭子类Duck类,有两个 ...
最新文章
- [置顶]使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包...
- matlab噪声倍频带声压级,近海风电场水下打桩噪声传播特性
- ListView 异步更新出现问题的解决(Handler)
- vertical-align
- Redis序列化、RedisTemplate序列化方式大解读,介绍Genericjackson2jsonredisserializer序列化器的坑
- Scrapy Django项目
- 学习自然语言处理,一张图就够了
- 数据库开发——MySQL——数据类型——非数值类型
- 内存模型 C++ 和Java内存模型
- Sublime Text提示Unable to download XXX. Please view the console for more details安装插件失败解决
- pythonelectron桌面开发案例_使用Electron开发基于Node.js的桌面应用
- oracle加大内存对大表,在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能...
- 【华为云技术分享】KubeFlow-Pipeline及Argo实现原理速析
- Python入门基础之条件判断、循环、dict和set
- C++ new 的三种面貌
- 第三届泰迪杯数据挖掘技能赛一等奖总结经验分享
- 全球与中国纳米铝硅合金粉末市场深度研究分析报告
- 大规模MIP的精确算法和实现
- 【计算机网络】中国大学MOOC哈工大国家精品课局域网部分习题
- JavaScript实时监听歌曲播放进度显示对应歌词