python类继承与子类实例初始化用法分析


Posted in Python onApril 17, 2015

本文实例讲述了python类继承与子类实例初始化用法。分享给大家供大家参考。具体分析如下:

[ 先贴参考书籍原文(中文英文对照)]
__init__方法介绍:
If a base class has an __init__() method the derived class's __init__() method must explicitly call it to ensure proper initialization of the base class part of the instance; for example: "BaseClass.__init__(self, [args...])"
As a special contraint on constructors, no value may be returned; doing so will cause a TypeError to be raised at runtime.

如果其基类也具有__init__(), 必须显式地在__init__()调用它, 以保证能够适当地初始化它的基类部分;例如: "BaseClass.__init__(self, [args...])"作为构造器的特殊情况, 它没有值被返回, 如果返回某个值, 会在运行时抛出异常TypeError.

1.子类定义了__init__方法时若未显示调用基类__init__方法,python不会帮你调用,解释运行都Ok

class A():
  def __init__(self):
    print 'a'
class B(A):
  def __init__(self):
    print 'b'
if __name__=='__main__':
  b=B()
>>> 
b

2.子类未定义__init__方法时,python会自动帮你调用首个基类的__init__方法,注意是首个。即:子类继承自多个基类时,只有第一个基类的__init__方法会被调用到:

class A:
  def __init__(self):
    print 'a'
class B:
  def __init__(self):
    print 'b'
class C(B):
  def __init__(self):
    print 'c'
  pass
class D1(A,B,C):
  pass
class D2(B,A,C):
  pass
class D3(C,B,A):
  pass
if(__name__=='__main__'):
  print 'd1------->:'
  d1=D1()
  print 'd2------->:'
  d2=D2()
  print 'd3------->:'
  d3=D3()
>>> 
d1------->:
a
d2------->:
b
d3------->:
c

3)基类未定义__init__方法时,若此时子类显示调用基类__init__方法时,python向上超找基类的基类的__init__方法并调用,实质同2

class A:
  def __init__(self):
    print 'a'
class B:
  def __init__(self):
    print 'b'
class C1(B,A):
  pass
class C2(A,B):
  pass
class D1(C1):
  def __init__(self):
    C1.__init__(self)
class D2(C2):
  def __init__(self):
    C2.__init__(self)
if(__name__=='__main__'):
  print 'd1------->:'
  d1=D1()
  print 'd2------->:'
  d2=D2()
>>> 
d1------->:
b
d2------->:
a

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python读取注册表中值的方法
Apr 08 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
pygame实现打字游戏
Feb 19 Python
python找出列表中大于某个阈值的数据段示例
Nov 24 Python
Django 路由层URLconf的实现
Dec 30 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
Python绘图之柱形图绘制详解
Jul 28 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 Python
详解python 条件语句和while循环的实例代码
Dec 28 Python
Python之qq自动发消息的示例代码
Feb 18 Python
python中split方法用法分析
Apr 17 #Python
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 #Python
python字典get()方法用法分析
Apr 17 #Python
详解Python中__str__和__repr__方法的区别
Apr 17 #Python
使用Python设置tmpfs来加速项目的教程
Apr 17 #Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 #Python
基于scrapy实现的简单蜘蛛采集程序
Apr 17 #Python
You might like
自己做矿石收音机
2021/03/02 无线电
php中的curl_multi系列函数使用例子
2014/07/29 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
PHP实现支持加盐的图片加密解密
2016/09/09 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
Python进行数据科学工作的简单入门教程
2015/04/01 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
python类:class创建、数据方法属性及访问控制详解
2016/07/25 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
Android interview questions
2016/12/25 面试题
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
毕业生怎样写好自荐信
2013/11/11 职场文书
护士感人事迹
2014/05/01 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
六查六看自查报告
2014/10/14 职场文书
领导干部考核评语
2015/01/04 职场文书
医院合作意向书范本
2015/05/08 职场文书
教学工作总结范文5篇
2019/08/19 职场文书