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 StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
利用Python进行异常值分析实例代码
Dec 07 Python
python机器学习实战之树回归详解
Dec 20 Python
python解决js文件utf-8编码乱码问题(推荐)
May 02 Python
python读取excel指定列数据并写入到新的excel方法
Jul 10 Python
Python创建或生成列表的操作方法
Jun 19 Python
解决Django migrate不能发现app.models的表问题
Aug 31 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
python列表的逆序遍历实现
Apr 20 Python
Python将字典转换为XML的方法
Aug 01 Python
python图片灰度化处理的几种方法
Jun 23 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+html5+ajax实现上传图片的方法
2016/05/14 PHP
php报错502badgateway解决方法
2019/10/11 PHP
Document 对象的常用方法
2009/07/31 Javascript
JavaScript 常用函数库详解
2009/10/21 Javascript
js继承的实现代码
2010/08/05 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
2011/04/02 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
Python切片索引用法示例
2018/05/15 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
python3.8下载及安装步骤详解
2020/01/15 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
班组长的岗位职责
2013/12/09 职场文书
优秀通讯员事迹材料
2014/01/28 职场文书
乔迁之喜主持词
2014/03/27 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
小区推广策划方案
2014/06/06 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
重阳节标语大全
2014/10/07 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers