10 多态
2018-06-18 02:24:25来源:未知 阅读 ()
面向对象学习目录
1 面向对象介绍
2 类、实例、属性、方法详解
3 面向过程与面向对象进一步比较
4 类与对象
5 属性查找与绑定方法
6 小结
7 继承与派生
8 组合
9 抽象类
10 多态
11 封装
12 绑定方法与非绑定方法
13 内置方法(上)
14 内置方法(中)之描述符
15 内置方法(下)
16 元类
多态
1 import abc 2 3 class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 4 @abc.abstractmethod 5 def talk(self): 6 pass 7 8 class People(Animal): #动物的形态之一:人 9 def talk(self): 10 print('say hello') 11 12 class Dog(Animal): #动物的形态之二:狗 13 def talk(self): 14 print('say wangwang') 15 16 class Pig(Animal): #动物的形态之三:猪 17 def talk(self): 18 print('say aoao')
1 import abc 2 class File(metaclass=abc.ABCMeta): #同一类事物:文件 3 @abc.abstractmethod 4 def click(self): 5 pass 6 7 class Text(File): #文件的形态之一:文本文件 8 def click(self): 9 print('open file') 10 11 class ExeFile(File): #文件的形态之二:可执行文件 12 def click(self): 13 print('execute file')
多态性
1 peo=People() 2 dog=Dog() 3 pig=Pig() 4 5 #peo、dog、pig都是动物,只要是动物肯定有talk方法 6 #于是我们可以不用考虑它们三者的具体是什么类型,而直接使用 7 peo.talk() 8 dog.talk() 9 pig.talk() 10 11 #更进一步,我们可以定义一个统一的接口来使用 12 def func(obj): 13 obj.talk()
所以,总结下抽象类与多态的关系:
先由抽象类统一定义这些相似类的相似属性(包括数据属性和函数属性,其中规定各相似类必须定义这些函数属性,定义的函数体可以多种形态),然后再将相似的函数属性用统一的接口归一化调用(统一接口的基础是各子类都规范要求了定义这些相似函数属性),从而实现了“同一接口,多种形态”。
>>> class Cat(Animal): #属于动物的另外一种形态:猫... def talk(self): ... print('say miao') ... >>> def func(animal): #对于使用者来说,自己的代码根本无需改动 ... animal.talk() ... >>> cat1=Cat() #实例出一只猫 >>> func(cat1) #甚至连调用方式也无需改变,就能调用猫的talk功能 say miao ''' 这样我们新增了一个形态Cat,由Cat类产生的实例cat1,使用者可以在完全不需要修改自己代码的情况下。使用和人、狗、猪一样的方式调用cat1的talk方法,即func(cat1) '''
鸭子类型
1 #二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用 2 class TxtFile: 3 def read(self): 4 pass 5 6 def write(self): 7 pass 8 9 class DiskFile: 10 def read(self): 11 pass 12 def write(self): 13 pass
1 #str,list,tuple都是序列类型 2 s=str('hello') 3 l=list([1,2,3]) 4 t=tuple((4,5,6)) 5 6 #我们可以在不考虑三者类型的前提下使用s,l,t 7 s.__len__() 8 l.__len__() 9 t.__len__() 10 11 len(s) 12 len(l) 13 len(t)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:8 组合
下一篇:Python基础学习(第一周)
- Python之对象持久化笔记 2019-08-13
- python之函数、面向对象 2019-08-13
- Python的面向对象2 2019-07-24
- Python之路【第九篇】:Python面向对象 2019-07-24
- python 之 并发编程(开启子进程的两种方式,进程对象的属性 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash