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中的rjust()方法使用详解
May 19 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
序列化Python对象的方法
Aug 01 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安装全攻略:APACHE
2006/10/09 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
深入浅析AngularJs模版与v-bind
2018/07/06 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python-openCV开运算实例
2020/07/05 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
教学实验楼管理制度
2014/02/01 职场文书
竞聘演讲稿
2014/04/24 职场文书
行政处罚决定书
2015/06/24 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
Web应用开发TypeScript使用详解
2022/05/25 Javascript