Python:子类的实例在创建和消亡时并不一定会调用基类的__init__()和__del__()
在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。