Python之类的继承
有时候我们会写多个类,那么类与类之间是可以有继承关系的。
例如:
#!/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之类的继承相关推荐
- Python中的继承和多态
本文以生活中的基础现象为切入点,主要介绍了Python基础中继承和多态,包括单继承.多继承的语法.多态常见的 "鸭子类型". 以及如何重写父类的方法都做了详细的讲解. 一.继承的介 ...
- python中继承是什么意思_如何理解Python中的继承?python入门
如何理解Python中的继承?如今,python编程语言深受企业和个人的喜爱.python开发工程师是近年来互联网行业非常热门的职业岗位之一.学习python的人除了零基础的,还有一部分是在职运维.在 ...
- python中的继承有什么特点_python类的继承是什么?类的继承有什么样的规则?
在这篇文章之中我们来了解一下python类的继承,对于刚刚接触到python这一编程语言的朋友来说,对于python类的继承的了解应该比较少,不过没关系,在接下来的文章之中我们就来了解一下python ...
- 什么是python中子类父类_零基础入门:python中子类继承父类的__init__方法实例
前言: 今天为大家带来的内容是零基础入门:python中子类继承父类的__init__方法实例!具有不错的参考意义,希望在此能够帮助到各位!(喜欢的话记得点赞转发关注不迷路哦) 使用Python写过面 ...
- python类与继承person类_关于python中类的继承及self
关于python中类的继承及self 如下,如果调用student类,则可以正常运行,但是如果去掉consumer.__init__(self, fee)中的self,将其改成consumer.__i ...
- python类方法继承_对python中类的继承与方法重写介绍
1.单继承 父类也叫基类 子类也叫派生类 如下所示,继承的关系: 继承的书写格式: class 子类(父类): 方法 实例: class Animal: def eat(self): print(&q ...
- Python之面向对象继承和派生
Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...
- Python面向对象简单继承
Python面向对象简单继承 python是面向对象的语言,它支持继承,即一个类可以继承父类那里属性和方法.本书代码源自<<Python 3 Object-Oriented Program ...
- Python中菱形继承的MRO顺序及property属性
Python中菱形继承的MRO顺序及property属性 文章目录 Python中菱形继承的MRO顺序及property属性 一.Python中菱形继承的MRO顺序 1. 单独调用父类的方法 2. 多 ...
- 关于python类的继承正确的说法是_2017美团点评的运维岗校招笔试题,测测你会几题?...
原标题:2017美团点评的运维岗校招笔试题,测测你会几题? 1.数据库:以下哪项不是HASH索引的特征? A MySQL不能确定在两个值之间大约有多少行 B 不能使用hash索引来加速ORDER BY ...
最新文章
- 简单实现AJAX: ASP.NET2.0 中回调的实现及常见问题的解决
- Bower 使用指南
- TensorFlow笔记(5) 多元线性回归
- 95-30-070-java.util-LinkedList
- 解决只可以上QQ却不可以上网问题
- 卷积码编码器matlab,卷积码的编解码matlab仿真.doc
- Java 可用于比较与排序的lambda表达式和comparing方法
- (转载)有关推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟输入区别...
- Bootstrap系列之treeview实现菜单树
- android 手写签批_Android自定义实现手写签名功能
- 终于有大佬把“计算机底层原理“全部总结出来了
- “天河一号”掌门人:这一刻中国人等了20多年
- There is no Action mapped for namespace [/] and action name [] associated with context path [/dxm__s
- 定时任务多线程-springboot
- 开源软件贡献者Top 10!第一名当之无愧!
- 30KW储能PCS逆变器双向变流器设计,双向DCDC和三电平逆变PCS
- Fat32、NTFS和exFAT格式
- Linux之文件与文件系统的压缩
- Apache Camel - 25 - CXF - WebService(Code First)
- 关于0“是不是自然数的了解