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 07 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
Python简单实现控制电脑的方法
Jan 22 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
Python实现简单查找最长子串功能示例
Feb 26 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 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数据流应用的一个简单实例
2012/09/14 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
举例讲解Python中is和id的用法
2015/04/03 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
pandas如何处理缺失值
2019/07/31 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
护理专业毕业生推荐信
2013/10/31 职场文书
会议邀请函范文
2014/01/09 职场文书
韩国商务邀请函
2014/01/14 职场文书
《雾凇》教学反思
2014/02/17 职场文书
搞笑的获奖感言
2014/08/16 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
2014年维稳工作总结
2014/11/18 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL