python继承编程教程_Python高级教程-多重继承
多重继承
继承是面向对象编程的一个重要的方式,因为通过继承,子类可以扩展父类的功能。
Animal类的层次设计,假设要实现以下4中动物:
Dog - 狗狗;
Bat - 蝙蝠;
Parrot - 鹦鹉;
Ostrich - 鸵鸟
如果按照哺乳类和鸟类来分:
如果按照“能跑”和“能飞”来归类,就应该设计出下图这样的类层次:
如果把上面的两种分类都包含进来,就得设计更多的层次:
哺乳类:能跑的哺乳类,能飞的哺乳类;
鸟类:能跑的鸟类,能飞的鸟类。
这么一来,类的层次就复杂了。正确的做法是采用多重继承。首先主要的类层次仍然是按照哺乳类和鸟类设计:
classAnimal(object):pass
#大类:
classMammal(Animal):pass
classBird(Animal):pass
#各种动物:
classDog(Mammal):pass
classBat(Mammal):pass
classParrot(Bird):pass
classOstrich(Bird):pass
现在,要给动物再加上Runnable和Flyable的功能,只需要先定义好Runnable和Flyable的类:
classRunnable(object):defrun(self):print('Running...')classFlyable(object):deffly(self):print('Flying...')
对于需要Rnnnable功能的动物,就多继承一个Runnable,例如dog:
classDog(Mammal, Runnable):pass
对于需要Flyable功能的动物,就多继承一个Flyable,例如bat:
classBat(Mammal, Flyable):pass
通过多继承,一个子类就可以同时获得多个父类的所有功能。
MixIn
在设计类的继承关系时,通常,主线都是单一继承下来,例如,Ostrich继承自Bird。但是,如果需要混入额外的功能,通过多继承就可以实现,比如让Ostrich除了继承自Bird外,再同时继承Runnable。这种设计通常称为MixIn。为了更好的看出继承关系,我们把Runnable和Flyable改为RunnableMixIn和FlyableMixIn。类似的,你还可以定义出肉食动物CarnivorousMixIn和植食动物HerbivoresMixIn,让某个动物同时拥有好几盒MixIn:
classDog(Mammal, RunnableMixIn, CarnivorousMixIn):pass
MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。
Python自带的很多库也使用了MixIn。举个例子,Python自带了TCPServer和UDPServer这两类网络服务,而同时服务多个用户就必须使用多进程或多线程模型,这两种模型由ForkingMinIn和ThreadingMixIn提供。通过组合,即可以创造合适的服务来。
比如编写一个多进程模式的TCP服务,定义如下:
classMyTCPServer(TCPServer, ForkingMixIn):pass
编写一个多线程模式的UDP服务,定义如下:
classMyUDPServer(UDPServer, ThreadingMixIn):pass
这样一来,我们不需要复杂而庞大的继承链,只要选择组合不同的类的功能,就可以快速构造出所需的子类。
总结
由于Python允许使用多重继承,因此MixIn就是一种常见的设计。
只允许单一继承的语言(如Java)不能使用MixIn的设计。
python继承编程教程_Python高级教程-多重继承相关推荐
- python中文编程教学_Python入门教程完整版400集(懂中文就能学会)快来带走
2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...
- python继承和多态_Python 简明教程 --- 21,Python 继承与多态
程序不是年轻的专利,但是,它属于年轻. 目录 我们已经知道封装,继承和多态 是面向对象的三大特征,面向对象语言都会提供这些机制. 1,封装 在这一节介绍类的私有属性和方法的时候,我们已经讲到过封装. ...
- python 神经网络编程 视频_python基础教程之达叔系列——神经网络编程基础|python基础教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ (1)二分类问题 目标:习得一个分类器,它以图片的特征向量作为输入,然后预测出结果 y 为 1 还是 0 ...
- python继承编程教程_Python实现通过继承覆盖方法示例
本文实例讲述了Python实现通过继承覆盖方法.分享给大家供大家参考,具体如下: Python真是太动态了,所有的方法默认都是虚的.子类定义父类同名函数之后,父类函数被覆盖. class P(obje ...
- python网络编程案例_Python 网络编程_python网络编程基础_python高级编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- python代码入门教程_Python入门教程丨1300多行代码,让你轻松掌握基础知识点
欢迎关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 前言 本文适合有经验的程序员尽快进入Python世界.特别地 ...
- python求素数因子_Python入门教程: 素数判断与素因子分解
好了, 我们继续挑战下Python入门编程, 如何判断一个数是素数?以及如何分解一个合数? 首先回忆下:素数就是大于1且除了1和它本身之外没有其他素因子.大于1的非素数称为合数.形如F_n=2^2^n ...
- python元编程运用_Python 中的元编程
就像元数据是有关数据的数据一样,元编程就是编写用于操纵程序的某些程序.人们普遍认为,元程序就是生成其他程序的某些程序,但范式更加广泛.所有旨在自我读取.分析.转换或修改的程序都是元编程的范例.例如: ...
- python网络编程内容_Python网络编程
本文要写的内容也称为Python套接字编程,并简单介绍socketserver类.参考教程主要是<Python核心编程>. 首先,客户端/服务器模型,客户端向服务器发送请求,在请求合理的情 ...
最新文章
- Flex 弹性盒基本语法
- 一起学nRF51xx 17 - lpcomp
- 基于Proxy思想的Android插件框架
- 机器学习接口和代码之 线性回归
- oracle存储过程季度方法,Oracle存储过程、触发器实现获取时间段内周、月、季度的具体时间...
- 关于vmware虚拟机硬件里没有软盘驱动器,而操作系统里还有的解决方法
- c#先进行uri解码_JavaScript、C# URL编码、解码总结
- c语言system.h头文件下载,c语言头文件大全
- cad快看_有石CAD自动下单排版软件,让你的CAD都比别人强!
- 适合初中文凭学的计算机技术,初中毕业学啥技术好 最吃香的手艺
- python爬b站视频_python代码福利:用requests爬取B站视频封面
- XSS(跨站脚本攻击)相关内容总结整理
- CART分类回归树算法
- U-boot启动流程(Linux内核)的分析(四)
- 【程序源代码】外卖侠源码
- 《启示录:打造用户喜爱的产品》第一部分 人员6 招聘产品经理
- 对象认知全提升,成为 JS 高手
- 小米杀不死的消息推送-- Android、java后端同时接入小米推送
- [NLP] 实例讲解 N-gram语言模型 中 Good-Turning 平滑技术
- CSS 如何实现羽化效果?
热门文章
- Python全栈最全学习之路-Python基础(七)
- oracle空实例连接报错01017,分享些工作中遇到的奇怪问题以及解决方案
- 洛谷 P2800 又上锁妖塔
- 2022-2028全球与中国移动集装箱租赁市场现状及未来发展趋势
- php 微信表情 转码和解码方法
- buu-[CISCN2019 总决赛 Day2 Web1]Easyweb
- 传统多用户MISO系统中的加权和速率WSR最大化问题,(优化AP的beamformingW)
- 配置CPU温度.风扇转速,硬盘温度监控
- 一天搞定Linux常用的基本命令!!!
- 如何将excel表格的.csv(逗号分隔值文件)转换成.xls文件