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面向对象(继承)相关推荐

  1. python面向对象继承_Python 面向对象 --- 继承

    目标 单继承 多继承 面向对象三大特性 1,封装 根据 职责 将 属性 和 方法 封装 到以抽象的 类 中 2,继承 实现代码的重用,相同的代码不需要重复的缩写 3,多态 不同的对象调用相同的方法,产 ...

  2. python面向对象继承_四. python面向对象(继承)

    一. 继承 class A:pass #父类 基类 超类 class B:pass #父类 基类 超类 class A_son(A,B): pass #子类 派生类 class AB_son(A):p ...

  3. Python面向对象——继承

    #coding:utf-8""" 术语: 1.在python3中,自定义创建的类都默认继承了python类中名为object的类 2.object类提供的方法,是双下划线 ...

  4. python 面向对象 继承之 supper 函数

    supper 最基本的使用方法: 重写父类的构造方法 再调用父类的构造方法 能够调用父类的构造方法,再调用父类的构造方法 class A(object):def __init__(self):prin ...

  5. 什么是继承python_面向对象继承

    Python 面向对象继承 一 什么是面向对象的继承 比较官方的说法就是: 继承(英语:inheritance)是面向对象软件技术当中的一个概念.如果一个类别A"继承自"另一个类别 ...

  6. python面向对象编程 -- 封装、继承

    面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...

  7. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

  8. Python之面向对象继承和派生

    Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...

  9. 27、Python 面向对象(创建类、创建实例对象、访问属性、内置类属性、对象销毁、类的继承、方法重写、基础重载方法、运算符重载、类属性与方法、下划线双下划线)

    27Python面向对象(Python2) Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. ...

最新文章

  1. day4(定义类,公有,私有方法,静态方法,原形方式的属性和方法)
  2. C++ 随机函数----谈rand() 和 srand() 体会
  3. java阶乘求和正负交替_C语言程序设计课件第4章090909
  4. USG防火墙单出口接入互联网
  5. 崂山白花蛇草水:旧款变爆款老字号“有预谋”
  6. 快评《19家网站内容低俗被曝光》
  7. php制表网页打印到a4纸,A4纸网页打印 html网页页面的宽度设置成多少
  8. 虚拟机Ubuntu开机后提示:无法应用原保存的显示器配置(屏幕显示问题)
  9. NOIP2014洛谷P2296:寻找道路(bfs)
  10. 撩课-Web大前端每天5道面试题-Day35
  11. cocostudio学习
  12. 电气能插本计算机类吗,2019年专插本电气工程及自动化专业介绍
  13. 半桥驱动器芯片 TPS28225 中文资料
  14. 全自动高清录播服务器,常态化高清录播服务器 高清全自动录播系统
  15. 信息检索2.1书刊资料检索工具--书目note
  16. linux 文本方式怎么安装,Linux文本方式安装系统
  17. 深度学习-2.机器学习基础
  18. 中国手机企业库存高达6000万,市场正常后或大规模降价促销
  19. 新数据经济的民主化:科技巨头如何窃取我们的数据以及我们如何夺回控制权
  20. go基础之map-迭代(四)

热门文章

  1. iOS:极光推送控制器跳转
  2. 未能解析引用的程序集……因为它对不在当前目标框架……
  3. flaash-ACC_LSMOOTH2: Cannot continue with smoothing calculation
  4. Git入门最终集!SSH公钥是乱码怎么办?IDEA与Git!将自己的代码上传至远程仓库!
  5. Mybatis-Plus实战中的几个条件构造器Wrapper用法
  6. 易语言逐条读access数据_易语言操作数据教程之ACCESS实战视频教程
  7. python零基础入门大数据_【资源分享】零基础入门大数据(数据分析)经验分享...
  8. ipad连接电脑_Ipad已经停用需要连接iTunes的一种解决方案,
  9. php 字体问题,php – Scraping上的字体或Unicode问题[复制]
  10. python网上有免费资源吗_【转载】学习Python无从下手?最好的免费资源想要拿走...