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 15 Python
使用Python的判断语句模拟三目运算
Apr 24 Python
python获取外网ip地址的方法总结
Jul 02 Python
python读写LMDB文件的方法
Jul 02 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
Python Unittest原理及基本使用方法
Nov 06 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 27 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遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php实现分页显示
2015/11/03 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
Seajs源码详解分析
2019/04/02 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
python 接口返回的json字符串实例
2018/03/27 Python
对python3新增的byte类型详解
2018/12/04 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
python字符串分割及字符串的一些常规方法
2019/07/24 Python
如何使用python切换hosts文件
2020/04/29 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
CSS3移动端vw+rem不依赖JS实现响应式布局的方法
2019/01/23 HTML / CSS
普通大学毕业生自荐信范文
2014/02/23 职场文书
新教师培训方案
2014/06/08 职场文书
英语专业自荐书
2014/06/13 职场文书
护林防火标语
2014/06/27 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
网络营销计划
2015/01/17 职场文书
迎新生欢迎词2015
2015/07/16 职场文书