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网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
python实现任意位置文件分割的实例
Dec 14 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
Python callable内置函数原理解析
Mar 05 Python
浅谈django 重载str 方法
May 19 Python
Python基于字典实现switch case函数调用
Jul 22 Python
Python爬虫抓取指定网页图片代码实例
Jul 24 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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/12/29 PHP
php实现根据url自动生成缩略图的方法
2014/09/23 PHP
PHP类的封装与继承详解
2015/09/29 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
2016/12/14 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
JS简单数组排序操作示例【sort方法】
2019/05/17 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
python中的对象拷贝示例 python引用传递
2014/01/23 Python
Python引用计数操作示例
2018/08/23 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
如何通过python画loss曲线的方法
2019/06/26 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
jupyter实现重新加载模块
2020/04/16 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
工业设计专业推荐信
2013/10/29 职场文书
年度考核自我评价
2014/01/25 职场文书
环保建议书作文
2014/03/12 职场文书
效能监察建议书
2014/05/19 职场文书
班风口号
2014/06/18 职场文书
体育教师个人总结
2015/02/09 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书