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实现在线音乐播放器
Mar 03 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
VSCode下配置python调试运行环境的方法
Apr 06 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
python烟花效果的代码实例
Feb 25 Python
在python中list作函数形参,防止被实参修改的实现方法
Jun 05 Python
Python实现寻找回文数字过程解析
Jun 09 Python
Python Numpy库的超详细教程
Apr 06 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中用hash实现的数组
2011/07/17 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
2011/03/30 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
Python NumPy库安装使用笔记
2015/05/18 Python
简单实现python聊天程序
2018/04/01 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
利用python实现周期财务统计可视化
2019/08/25 Python
python中树与树的表示知识点总结
2019/09/14 Python
基于python代码批量处理图片resize
2020/06/04 Python
python简单实现插入排序实例代码
2020/12/16 Python
软件测试工程师结构化面试题库
2016/11/23 面试题
如何客观的进行自我评价
2013/12/17 职场文书
工程班组长岗位职责
2013/12/30 职场文书
工程售后服务承诺书
2014/05/21 职场文书
高三励志标语
2014/06/05 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
太空授课观后感
2015/06/17 职场文书
2015年团委副书记工作总结
2015/07/23 职场文书
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL