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实现数组插入新元素的方法
May 22 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
python数据结构链表之单向链表(实例讲解)
Jul 25 Python
从django的中间件直接返回请求的方法
May 30 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
浅谈python之自动化运维(Paramiko)
Jan 31 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
python代数式括号有效性检验示例代码
Oct 04 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 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
JQuery 弹出框定位实现方法
2010/12/02 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
2014/03/19 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
2017/07/21 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
Python构造函数及解构函数介绍
2015/02/26 Python
python写日志封装类实例
2015/06/28 Python
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
处理textarea中的换行和空格
2019/12/12 HTML / CSS
高中语文教学反思
2014/01/16 职场文书
企业人事任命书
2014/06/05 职场文书
关于读书的演讲稿500字
2014/08/27 职场文书
自动在Windows中运行Python脚本并定时触发功能实现
2021/09/04 Python
mysql如何能有效防止删库跑路
2021/10/05 MySQL
React Fragment介绍与使用详解
2021/11/11 Javascript
浅谈Python中对象是如何被调用的
2022/04/06 Python