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 list使用示例 list中找连续的数字
Jan 27 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
python web框架学习笔记
May 03 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
tensorflow中next_batch的具体使用
Feb 02 Python
django 解决manage.py migrate无效的问题
May 27 Python
python利用requests库进行接口测试的方法详解
Jul 06 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
python防止随意修改类属性的实现方法
Aug 21 Python
Python实现RGB与HSI颜色空间的互换方式
Nov 27 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
Python list和str互转的实现示例
Nov 16 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
PHP禁止页面缓存的代码
2011/10/23 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
详解PHP队列的实现
2019/03/14 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
Prototype String对象 学习
2009/07/19 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
JavaScript实现的一个计算数字步数的算法分享
2014/12/06 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
layui 弹出层回调获取弹出层数据的例子
2019/09/02 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
python计算方程式根的方法
2015/05/07 Python
python数组过滤实现方法
2015/07/27 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
python数据封装json格式数据
2018/03/04 Python
python 输出上个月的月末日期实例
2018/04/11 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
介绍一下MD5加密算法
2016/11/12 面试题
大学生专业个人学习的自我评价
2013/10/26 职场文书
个人评价范文分享
2014/01/11 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
成绩报告单家长评语
2014/12/30 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
送给客户微信问候语!
2019/07/04 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python