今天看别人代码的时候,发现子类中没有定义__init__函数,内心比较疑惑,于是自己验证了几种情况,记录下来,作为备忘。
情况一:父类定义了__init__函数,而子类没有定义__init__函数
class Test1():
def __init__(self):
self.a = 2
print('in Test1 class')
class Test2(Test1):
def func1(self):
print('hello')
test2 = Test2()
print(test2.a)
输出结果:
in Test1 class
2
从上面输出结果可以发现,尽管子类Test2中没有定义__init__函数,但在实例化子类Test2的时候,系统实际调用了父类Test1的__init__函数,子类可以访问父类定义的的变量a。
情况二:父类、子类都定义了__init__函数,并且在子类的__init__函数中,明确调用了父类的__init__函数
class Test1():
def __init__(self):
self.a = 2
print('in Test1 class')
class Test2(Test1):
def __init__(self):
super().__init__()
print('in Test2 class')
def func1(self):
print('hello')
test2 = Test2()
print(test2.a)
输出结果:
in Test1 class
in Test2 class
2
从上面输出结果可以发现,父类的__init__函数被执行了,子类可以访问父类定义的变量a。
情况三:父类、子类都定义了__init__函数,但在子类的__init__函数中没有明确调用父类的__init__函数
class Test1():
def __init__(self):
self.a = 2
print('in Test1 class')
class Test2(Test1):
def __init__(self):
#super().__init__()
print('in Test2 class')
def func1(self):
print('hello')
test2 = Test2()
print(test2.a)
输出结果:
从上面输出结果可以发现,尽管父类和子类定定义了__init__函数,但如果没有在子类的__init__函数中明确调用父类的__init__函数,那么父类的__init__函数是执行不到的。