Python教程:多态与多态性
一、多态
Python中多态是指一类事物有多种形态。比如动物有多种形态,人,狗,猫,等等。文件有多种形态:文本文件,可执行文件。
二、多态性
1.什么是多态性?
多态性是指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性
静态多态性:如任何类型都可以用运算符+进行运算
动态多态性:如下
import abcclass Animals(metaclass=abc.ABCMeta):@abc.abstractmethoddef talk(self):passclass People(Animals):def talk(self):print('People is talking')class Cat(Animals):def talk(self):print('Cat is miaomiao')class Dog(Animals):def talk(self):print('Dog is wangwang')cat1 = Cat()
dog1 = Dog()
peo1 = People()
# peo、dog、pig都是动物,只要是动物肯定有talk方法
# 于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
peo1.talk()
dog1.talk()
peo1.talk()# 定义一个统一的接口来访问
def func(obj):obj.talk()func(cat1)
2.为什么要用多态性?
①增加了程序的灵活性
以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)
②增加了程序额可扩展性
通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Pig(Animals): # 属于动物的另外一种形态:猪def talk(self):print('Pig is huohuo')pig = Pig()# 统一接口,对于使用者来说,自己的代码根本无需改动
def func(obj):obj.talk()func(pig) # 甚至连调用方式都无需改变,就能调用出pig的talk功能
三、鸭子类型
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。
例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的"走"和"叫"方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的"走"和"叫"方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。
鸭子类型通常得益于不测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。
class Duck():def walk(self):print('I walk like a duck')def swim(self):print('i swim like a duck')class Person():def walk(self):print('this one walk like a duck') def swim(self):print('this man swim like a duck')
可以很明显的看出,Person类拥有跟Duck类一样的方法,当有一个函数调用Duck类,并利用到了两个方法walk()和swim()。我们传入Person类也一样可以运行,函数并不会检查对象的类型是不是Duck,只要他拥有walk()和swim()方法,就可以正确的被调用。
再举例,如果一个对象实现了__getitem__
方法,那python的解释器就会把它当做一个collection,就可以在这个对象上使用切片,获取子项等方法;如果一个对象实现了__iter__
和next方法,python就会认为它是一个iterator,就可以在这个对象上通过循环来获取各个子项。
Python教程:多态与多态性相关推荐
- Python类的多态和多态性
很多人喜欢将多态与多态性二者混为一谈,然后百思不得其解,其实只要分开看,就会很明朗. 一.多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 序列数据类型有多种形态 ...
- python中对多态和多态性的理解
一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多态的概念依赖于继承) import abc class Animal(metaclass=abc. ...
- 对python中多态详细教程
一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多态的概念依赖于继承) import abc class Animal(metaclass=abc. ...
- python面向对象:多态与多态性
多态 多态指的是一类事物有多种形态,比如 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物@abc.abs ...
- 廖的python教程_廖雪峰的Python3.x教程.pdf
目录 Python教程 Python简介 安装Python Python解释器 第一个Python程序 使用文本编辑器 Python代码运行助手 输入和输出 源码 learning.py Python ...
- python教程廖雪峰云-Python3基础教程-廖雪峰[带标签完整版]
标签: Python教程... 5 Python简介... 7 安装Python. 12 Python解释器... 16 第一个Python程序... 18 使用文本编辑器... 19 Python代 ...
- 四全集学python选哪种电脑_“Python教程哪个版本最适合学习?“python教程全集
python教程,求一套比较好的python教程 好不好主要先看你自己,理解能力样,有没有接触过编程,有没础,这很重要: 看教程,能不能先给你建立起知识体系框架,许多教程一上来就直接给你灌输知识很让人 ...
- 关于python中多态的理解。
学习到多态的时候,不确定自己是否完全理解了python的多态,于是Google观看了众多资料和文献,发现很多编程大佬讲得过于抽象,不便于新手理解,这违背了python的初衷:简单. 所以我在此用通俗一 ...
- Day20:绑定方法与非绑定办法、多态和多态性
一.绑定方法与非绑定方法 类中定义的函数分成两大类: 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定 ...
最新文章
- python3 判断进程是否存在
- 北大计算机科学与技术专业河南录取分数线,北京大学河南录取分数线|2021北京大学河南分数线|2021年北京大学河南高考分数线|2021年北京大学河南招生计划录取人数...
- SparkSQL-从0到1认识Catalyst
- python中返回值为ture表达式_python return逻辑判断表达式(21)|python教程|python入门|python教程...
- javaScript一种优化模式-初始化时分支
- c# datagridview 中DataSource的使用总结
- c语言表达式1 33的值是,2015年计算机二级C语言测试题及答案(1)
- mis是商科还是计算机专业,MIS是什么?管理信息系统MIS和计算机科学CS有什么区别?...
- @hapi/joi 报错 “message“: “Cannot mix different versions of joi schemas“
- English——slang about body
- 华安基金高管事发 基金业突遇“公信力寒流”(ZT)
- eclipse注释出现问号
- php 指定大小缩略图片
- 一个很好的Git操作指南
- 中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)
- linux shell编程 ppt,Linux常用命令与Shell基本编程.ppt
- Ubuntu 下面的aMule 的 Kad 或者 Ed2k 连不上
- 1G内存与512M内存?AMD系统性能大比较(转)
- win10系统休眠文件删除
- python毕业设计作品基于django框架校园排课选课系统毕设成品(3)后台管理功能