python类继承与子类实例初始化用法分析

yipeiwu_com6年前Python基础

本文实例讲述了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程序设计有所帮助。

相关文章

python3 selenium自动化测试 强大的CSS定位方法

ccs的优点:css相对xpath语法比xpath简洁,定位速度比xpath快 css的缺点:css不支持用逻辑运算符来定位,而xpath支持。css定位语法形式多样,相对xpath比较...

python安装twisted的问题解析

python安装twisted的问题解析

今天在用pip安装wisted模块的时候没有任何的问题,但是当使用的时候发生了,无法导入win32api这个包,原因是因为python不能自己去使用系统的api。因此需要去安装pywin...

使用Anaconda3建立虚拟独立的python2.7环境方法

由于一些不可预测的因素,必须使用python2.7进行开发,所以研究了一下怎么在Anaconda3下建立2.7的开发环境,发现十分方便,在此分享一下。 首先安装Anaconda3,这就不...

Python用sndhdr模块识别音频格式详解

本文主要介绍了Python编程中,用sndhdr模块识别音频格式的相关内容,具体如下。 sndhdr模块 功能描述:sndhdr模块提供检测音频类型的接口。 唯一一个API sndhdr...

通过Python来使用七牛云存储的方法详解

通过Python来使用七牛云存储的方法详解

本教程旨在介绍如何使用七牛的Python SDK来快速地进行文件上传,下载,处理,管理等工作。 安装 首先,要使用Python的SDK必须要先安装。七牛的Python SDK是开源的,托...