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多进程编程技术实例分析
Sep 16 Python
python监控网站运行异常并发送邮件的方法
Mar 13 Python
windows下python 3.6.4安装配置图文教程
Aug 21 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
如何使用Python标准库进行性能测试
Jun 25 Python
Python 实现训练集、测试集随机划分
Jan 08 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
python多线程爬取西刺代理的示例代码
Jan 30 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 Python
python pygame 开发五子棋双人对弈
May 02 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
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
Require.js的基本用法详解
2017/07/03 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
python获取远程图片大小和尺寸的方法
2015/03/26 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python实现Flappy Bird源码
2018/12/24 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
北美三大旅游网站之一:Travelocity加拿大
2016/08/20 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
医院门卫岗位职责
2013/12/30 职场文书
优秀教师获奖感言
2014/01/31 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python