有时候我们会写多个类,那么类与类之间是可以有继承关系的。

例如:

#!/usr/bin/env python
#-*-coding:utf-8-*-class father:def __init__(self):self.fname = 'fff'def func(self):print 'father.func'class son(father):def __init__(self):self.sname = 'sss'def bar(self):print 'son.bar's1 = son()
s1.bar()
s1.func()

输出结果:

son.bar
father.func
son.抽烟

从上面的例子可以看到

父类中的方法可以被子类继承并调用,调用方式为类.父类中方法名

子类可以继承父类,并重写父类中的方法

例如:

#!/usr/bin/env python
#-*-coding:utf-8-*-
class father:def __init__(self):self.fname = 'fff'def func(self):print 'father.func'def bad(self):print 'father.抽烟喝酒'
class son(father):def __init__(self):self.sname = 'sss'def bar(self):print 'son.bar'def bad(self):print 'son.抽烟'
s1 = son()
s1.bar()
s1.func()

输出结果:

son.bar
father.func
son.抽烟

子类怎么调用父类的构造函数?

在子类的构造函数中执行父类名.__init__(self)即可

#!/usr/bin/env python
#-*-coding:utf-8-*-
class father:def __init__(self):self.fname = 'fff'print 'father.init'def func(self):print 'father.func'def bad(self):print 'father.抽烟喝酒'
class son(father):def __init__(self):self.sname = 'sss'print 'son.init'father.__init__(self)def bar(self):print 'son.bar'def bad(self):print 'son.抽烟'
s1 = son()
s1.bar()

输出结果:

son.init
father.init
son.bar

经典类和新式类

新式类在类名后面有(object)标识。

经典类和新式类的区别:

经典类在类的多重继承时,有一个bug,就是:应该是广度优先,但在多重继承后变成了深度优先。

#!/usr/bin/env python
#-*-coding:utf-8-*-
class A:def __init__(self):print 'This is A'def save(self):print 'save from A'
class B(A):def __init__(self):print 'This is B'
class C(A):def __init__(self):print 'This is C'def save(self):print 'save from C'
class D(B,C):def __init__(self):print 'This is D'
c = D()
c.save()

输出结果

This is D
save from A

从上例可知,D类继承了B和C两个类,并且B优先继承(多重继承时,左边优先继承)

由于B类中没有save方法,而B继承了A,所以D中在继承B时,save方法应该是A类中的save方法。而D又继承了C类,所以最后D类中的最后的sava方法应该是继承C类的,但是上面的结果是D继承了A类。所以这是一个明显的bug。

我们把上例换成新式类在测试下结果:

#!/usr/bin/env python
#-*-coding:utf-8-*-
class A(object):def __init__(self):print 'This is A'def save(self):print 'save from A'
class B(A):def __init__(self):print 'This is B'
class C(A):def __init__(self):print 'This is C'def save(self):print 'save from C'
class D(B,C):def __init__(self):print 'This is D'
c = D()
c.save()

输出结果:

This is D
save from C

总结:新式类修复了经典类的一些bug,并且完全兼容经典类。所以建议使用新式类。

转载于:https://blog.51cto.com/zengestudy/1858476

Python之类的继承相关推荐

  1. Python中的继承和多态

    本文以生活中的基础现象为切入点,主要介绍了Python基础中继承和多态,包括单继承.多继承的语法.多态常见的 "鸭子类型". 以及如何重写父类的方法都做了详细的讲解. 一.继承的介 ...

  2. python中继承是什么意思_如何理解Python中的继承?python入门

    如何理解Python中的继承?如今,python编程语言深受企业和个人的喜爱.python开发工程师是近年来互联网行业非常热门的职业岗位之一.学习python的人除了零基础的,还有一部分是在职运维.在 ...

  3. python中的继承有什么特点_python类的继承是什么?类的继承有什么样的规则?

    在这篇文章之中我们来了解一下python类的继承,对于刚刚接触到python这一编程语言的朋友来说,对于python类的继承的了解应该比较少,不过没关系,在接下来的文章之中我们就来了解一下python ...

  4. 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例

    前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...

  5. python类与继承person类_关于python中类的继承及self

    关于python中类的继承及self 如下,如果调用student类,则可以正常运行,但是如果去掉consumer.__init__(self, fee)中的self,将其改成consumer.__i ...

  6. python类方法继承_对python中类的继承与方法重写介绍

    1.单继承 父类也叫基类 子类也叫派生类 如下所示,继承的关系: 继承的书写格式: class 子类(父类): 方法 实例: class Animal: def eat(self): print(&q ...

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

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

  8. Python面向对象简单继承

    Python面向对象简单继承 python是面向对象的语言,它支持继承,即一个类可以继承父类那里属性和方法.本书代码源自<<Python 3 Object-Oriented Program ...

  9. Python中菱形继承的MRO顺序及property属性

    Python中菱形继承的MRO顺序及property属性 文章目录 Python中菱形继承的MRO顺序及property属性 一.Python中菱形继承的MRO顺序 1. 单独调用父类的方法 2. 多 ...

  10. 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...

    原标题:2017美团点评的运维岗校招笔试题,测测你会几题? 1.数据库:以下哪项不是HASH索引的特征? A MySQL不能确定在两个值之间大约有多少行 B 不能使用hash索引来加速ORDER BY ...

最新文章

  1. 简单实现AJAX: ASP.NET2.0 中回调的实现及常见问题的解决
  2. Bower 使用指南
  3. TensorFlow笔记(5) 多元线性回归
  4. 95-30-070-java.util-LinkedList
  5. 解决只可以上QQ却不可以上网问题
  6. 卷积码编码器matlab,卷积码的编解码matlab仿真.doc
  7. Java 可用于比较与排序的lambda表达式和comparing方法
  8. (转载)有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别...
  9. Bootstrap系列之treeview实现菜单树
  10. android 手写签批_Android自定义实现手写签名功能
  11. 终于有大佬把“计算机底层原理“全部总结出来了
  12. “天河一号”掌门人:这一刻中国人等了20多年
  13. There is no Action mapped for namespace [/] and action name [] associated with context path [/dxm__s
  14. 定时任务多线程-springboot
  15. 开源软件贡献者Top 10!第一名当之无愧!
  16. 30KW储能PCS逆变器双向变流器设计,双向DCDC和三电平逆变PCS
  17. Fat32、NTFS和exFAT格式
  18. Linux之文件与文件系统的压缩
  19. Apache Camel - 25 - CXF - WebService(Code First)
  20. 关于0“是不是自然数的了解

热门文章

  1. [Vue源码分析] Virtual DOM
  2. 三维重建6:绑架问题/SensorFusion/IMU+CV-小尺度SLAM
  3. AI:恐怖谷理论的陷阱
  4. 时序分析:串匹配—Brute-Force算法
  5. vs2012下 error4996
  6. Windows 8常用快捷键
  7. 【SQLite】简单的基本使用步骤
  8. linux命令学习记录一
  9. 完整全面的Java资源库(包括构建、操作、代码分析、编译器、数据库、社区等等)...
  10. [一文一命令]find命令详解