在Python中,子类的实例在创建和消亡时并不一定会调用基类的__init__()__del__(),具体情况直接用代码说明。

基类(文件名为BaseClass.py):

class Base():

    def __init__(self):
        print('Base')

    def __del__(self):
        print('Base die')

当子类为:

import BaseClass


class Child(BaseClass.Base):

    def __del__(self):
        print('Child die')

if __name__ == '__main__':
    t = Child()

即子类没有初始化方法__init__()时,子类实例化会调用基类的__init__();即结果为:

Base

当子类为:

import BaseClass


class Child(BaseClass.Base):

    def __init__(self):
        print('Child')

    def __del__(self):
        print('Child die')

if __name__ == '__main__':
    t = Child()

即子类有初始化方法__init__(),此时会只会调用子类的__init__(),并不会调用基类;即结果为:

Child

如果需要调用基类的__init__(),则子类__init__()中必须显式调用:

import BaseClass


class Child(BaseClass.Base):

    def __init__(self):
        print('Child')
        BaseClass.Base.__init__(self)

    def __del__(self):
        print('Child die')

if __name__ == '__main__':
    t = Child()

此时结果为:

Child
Base

注意:调用基类方法时,参数中必须加上self。


对于__del__()方法,也有类似的效果。