Python面向对象(继承)
day24
面向对象三大特性:继承
1 class F: 2 def f1(self): 3 print("F.f1") 4 5 def f2(self): 6 print("F.f2") 7 8 class S(F):#子类继承父类 9 def s1(self): 10 print("S.s1") 11 12 obj = S() 13 14 obj.s1() 15 obj.f1()#继承了父类的方法
子类对象继承了父类的方法。
执行结果:
S.s1 F.f1Process finished with exit code 0
覆盖父类中的方法
1 class F: 2 def f1(self): 3 print("F.f1") 4 5 def f2(self): 6 print("F.f2") 7 8 class S(F): 9 def s1(self): 10 print("S.s1") 11 12 def f2(self):#覆盖掉父类的方法f2 13 print("S.f2") 14 15 obj = S() 16 17 obj.f1()#继承了父类的方法 18 19 obj.f2()#继承了父类的方法,但是子类中有相同的方法则使用子类的方法 20 21 print("############################################################################################") 22 23 dui = S() 24 dui.s1() #s1中self是形参,指代dui 25 dui.f1()#其中self指代dui,即调用方法的对象
子类中有与父类相同的方法则使用子类自己的方法。
执行结果:
F.f1 S.f2 ############################################################################################ S.s1 F.f1Process finished with exit code 0
super:父类和子类相同的方法都执行
1 class F: 2 def f1(self): 3 print("F.f1") 4 5 def f2(self): 6 print("F.f2") 7 8 class S(F): 9 def s1(self): 10 print("S.s1") 11 12 def f2(self):#覆盖掉父类的方法f2 13 super(S, self).f2()#当前类名、self 执行父类的f2方法 14 print("S.f2") 15 F.f2(self)#执行父类的f2方法 16 17 obj = S() 18 obj.f2()
13行和15行的结果一样,推荐使用super方法。
执行结果:
F.f2 S.f2 F.f2Process finished with exit code 0
多继承
1 class F1: 2 def a(self): 3 print("F1.a") 4 5 class F2: 6 def a(self): 7 print("F2.a") 8 9 class S(F1, F2):#优先从左找 10 pass 11 12 obj = S() 13 obj.a()
优先从左边父类找方法。
执行结果:
F1.aProcess finished with exit code 0
父类为子类
1 class F0: 2 def a(self): 3 print("F0.a") 4 5 class F1(F0): 6 def b(self): 7 print("F1.b") 8 9 class F2: 10 def a(self): 11 print("F2.a") 12 13 class S(F1, F2):#优先从左找 14 pass 15 16 obj = S() 17 obj.a()
从左边找对应的方法,找到的第一个作为对象的方法。
执行结果:
F0.aProcess finished with exit code 0
有共同父类
1 class Base(): 2 def a(self): 3 print("Base.a") 4 5 class F0(Base): 6 def b(self): 7 print("F0.b") 8 9 class F1(F0): 10 def c(self): 11 print("F1.c") 12 13 class F2(Base): 14 def a(self): 15 print("F2.a") 16 17 class S(F1, F2):#优先从左找 18 pass 19 20 obj = S() 21 obj.a()
有共同父类,父类方法最后考虑。(并不是左边一条路走到黑,直到共同父类。)
执行结果:
F2.aProcess finished with exit code 0
1 class BaseReuqest: 2 pass 3 4 5 class RequestHandler(BaseReuqest): 6 def serve_forever(self): 7 # self,是obj 8 print('RequestHandler.serve_forever') 9 self.process_request() 10 11 def process_request(self): 12 print('RequestHandler.process_request') 13 14 class Minx: 15 16 def process_request(self): 17 print('minx.process_request') 18 19 class Son(Minx, RequestHandler): 20 pass 21 22 23 obj = Son() # init 24 obj.serve_forever()
其中第9行的self还是指obj对象,所以process_request方法必须先从Minx类中开始找。
执行结果:
RequestHandler.serve_forever minx.process_requestProcess finished with exit code 0
执行流程
1 class BaseReuqest: 2 3 def __init__(self): 4 print('BaseReuqest.init') 5 6 7 class RequestHandler(BaseReuqest): 8 def __init__(self): 9 print('RequestHandler.init') 10 BaseReuqest.__init__(self) 11 12 def serve_forever(self): 13 # self,是obj 14 print('RequestHandler.serve_forever') 15 self.process_request() 16 17 def process_request(self): 18 print('RequestHandler.process_request') 19 20 class Minx: 21 22 def process_request(self): 23 print('minx.process_request') 24 25 26 class Son(Minx, RequestHandler): 27 pass 28 29 30 obj = Son() # init 31 obj.serve_forever()
第30行,创建对象时先执行__init__。
执行结果:
RequestHandler.init BaseReuqest.init RequestHandler.serve_forever minx.process_requestProcess finished with exit code 0
转载于:https://www.cnblogs.com/112358nizhipeng/p/9818054.html
Python面向对象(继承)相关推荐
- python面向对象继承_Python 面向对象 --- 继承
目标 单继承 多继承 面向对象三大特性 1,封装 根据 职责 将 属性 和 方法 封装 到以抽象的 类 中 2,继承 实现代码的重用,相同的代码不需要重复的缩写 3,多态 不同的对象调用相同的方法,产 ...
- python面向对象继承_四. python面向对象(继承)
一. 继承 class A:pass #父类 基类 超类 class B:pass #父类 基类 超类 class A_son(A,B): pass #子类 派生类 class AB_son(A):p ...
- Python面向对象——继承
#coding:utf-8""" 术语: 1.在python3中,自定义创建的类都默认继承了python类中名为object的类 2.object类提供的方法,是双下划线 ...
- python 面向对象 继承之 supper 函数
supper 最基本的使用方法: 重写父类的构造方法 再调用父类的构造方法 能够调用父类的构造方法,再调用父类的构造方法 class A(object):def __init__(self):prin ...
- 什么是继承python_面向对象继承
Python 面向对象继承 一 什么是面向对象的继承 比较官方的说法就是: 继承(英语:inheritance)是面向对象软件技术当中的一个概念.如果一个类别A"继承自"另一个类别 ...
- python面向对象编程 -- 封装、继承
面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...
- Python面向对象编程:类继承和其衍生术语
Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...
- Python之面向对象继承和派生
Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...
- 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)
27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...
最新文章
- day4(定义类,公有,私有方法,静态方法,原形方式的属性和方法)
- C++ 随机函数----谈rand() 和 srand() 体会
- java阶乘求和正负交替_C语言程序设计课件第4章090909
- USG防火墙单出口接入互联网
- 崂山白花蛇草水:旧款变爆款老字号“有预谋”
- 快评《19家网站内容低俗被曝光》
- php制表网页打印到a4纸,A4纸网页打印 html网页页面的宽度设置成多少
- 虚拟机Ubuntu开机后提示:无法应用原保存的显示器配置(屏幕显示问题)
- NOIP2014洛谷P2296:寻找道路(bfs)
- 撩课-Web大前端每天5道面试题-Day35
- cocostudio学习
- 电气能插本计算机类吗,2019年专插本电气工程及自动化专业介绍
- 半桥驱动器芯片 TPS28225 中文资料
- 全自动高清录播服务器,常态化高清录播服务器 高清全自动录播系统
- 信息检索2.1书刊资料检索工具--书目note
- linux 文本方式怎么安装,Linux文本方式安装系统
- 深度学习-2.机器学习基础
- 中国手机企业库存高达6000万,市场正常后或大规模降价促销
- 新数据经济的民主化:科技巨头如何窃取我们的数据以及我们如何夺回控制权
- go基础之map-迭代(四)
热门文章
- iOS:极光推送控制器跳转
- 未能解析引用的程序集……因为它对不在当前目标框架……
- flaash-ACC_LSMOOTH2: Cannot continue with smoothing calculation
- Git入门最终集!SSH公钥是乱码怎么办?IDEA与Git!将自己的代码上传至远程仓库!
- Mybatis-Plus实战中的几个条件构造器Wrapper用法
- 易语言逐条读access数据_易语言操作数据教程之ACCESS实战视频教程
- python零基础入门大数据_【资源分享】零基础入门大数据(数据分析)经验分享...
- ipad连接电脑_Ipad已经停用需要连接iTunes的一种解决方案,
- php 字体问题,php – Scraping上的字体或Unicode问题[复制]
- python网上有免费资源吗_【转载】学习Python无从下手?最好的免费资源想要拿走...