python子类、父类的__init__函数

python子类、父类的__init__函数

今天看别人代码的时候,发现子类中没有定义__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__函数是执行不到的。

你可能感兴趣的:(python,python,开发语言)