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定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
Python Web框架Flask信号机制(signals)介绍
Jan 01 Python
Python中防止sql注入的方法详解
Feb 25 Python
Python探索之自定义实现线程池
Oct 27 Python
django 将model转换为字典的方法示例
Oct 16 Python
pygame游戏之旅 创建游戏窗口界面
Nov 20 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 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 CURL 内存泄露问题解决方法
2015/02/12 PHP
php日期操作技巧小结
2016/06/25 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
2011/12/11 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
解决vue项目使用font-awesome,build后路径的问题
2018/09/01 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
python匹配两个短语之间的字符实例
2018/12/25 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
python3.7调试的实例方法
2020/07/21 Python
flask开启多线程的具体方法
2020/08/02 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
css3 box-shadow阴影(外阴影与外发光)图示讲解
2017/08/11 HTML / CSS
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
建筑经济管理专业求职信分享
2014/01/06 职场文书
个人对照检查材料
2014/02/12 职场文书
个人校本研修方案
2014/05/26 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
遗失说明具结保证书
2015/02/26 职场文书
element多个表单校验的实现
2021/05/27 Javascript