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命令行解析工具Argparse
Apr 20 Python
python 异常处理总结
Oct 18 Python
Python入门之后再看点什么好?
Mar 05 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
python使用response.read()接收json数据的实例
Dec 19 Python
Flask-WTF表单的使用方法
Jul 12 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
python中delattr删除对象方法的代码分析
Dec 15 Python
Python LMDB库的使用示例
Feb 14 Python
python基础之//、/与%的区别详解
Jun 10 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
2013/10/29 PHP
php绘制一个扇形的方法
2015/01/24 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
2019/10/24 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
浅谈Vue.js
2017/03/02 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
2019/02/21 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
Python数组条件过滤filter函数使用示例
2014/07/22 Python
利用Python实现Windows定时关机功能
2017/03/21 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
python动态文本进度条的实例代码
2020/01/22 Python
利用keras加载训练好的.H5文件,并实现预测图片
2020/01/24 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
linux比较文件内容的命令是什么
2015/09/23 面试题
医学专业毕业生推荐信
2013/11/14 职场文书
机械设计职业生涯规划书
2013/12/27 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
创先争优宣传标语
2014/10/08 职场文书
个人维稳承诺书
2015/05/04 职场文书
python 实现的截屏工具
2021/05/08 Python
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript