Python 子类继承父类构造函数

前言

子类继承父类的构造函数__init__,具体几种情况,想一口气说出来还真有点难。看到菜鸟教程总结的非常不错,特意记录下,也方便后面自己翻阅。

详情

  • 情况一

    子类不重写__init__方法,实例化后会自动调用父类的__init__方法。

    实例

    class Father:
        def __init__(self, name):
            self.name = name
            print(f'name: {self.name}')
    
        def getName(self):
            return f'Father {self.name}'
      
    class Son(Father):
        def getName(self):
            return f'Son {self.name}'
     
    if __name__=='__main__':
        son = Son('runoob')
        print(son.getName())
    

    输出结果:

    name: runoob
    Son runoob
    
  • 情况二

    子类重写__init__方法,实例化后会覆盖父类的__init__方法,父类的__init__不再执行。

    实例

    class Father:
        def __init__(self, name):
            self.name = name
            print(f'name: {self.name}')
    
        def getName(self):
            return f'Father {self.name}'
     
    class Son(Father):
        def __init__(self, name):
            print("hi")
            self.name = name
    
        def getName(self):
            return f'Son {self.name}'
     
    if __name__=='__main__':
        son = Son('runoob')
        print(son.getName())
    

    输出结果:

    hi
    Son runoob
    
  • 情况三

    子类重写__init__方法,同时又需要调用父类的__init__方法,使用super()函数,super()是一个特殊函数,可以调用父类的__init__方法。

    实例

    class Father:
        def __init__(self, name):
            self.name = name
            print(f'name: {self.name}')
    
        def getName(self):
            return f'Father {self.name}'
     
    class Son(Father):
        def __init__(self, name):
            super().__init__(name)
            print("hi")
            self.name = name
    
        def getName(self):
            return f'Son {self.name}'
     
    if __name__=='__main__':
        son = Son('runoob')
        print(son.getName())
    

    输出结果:

    name: runoob
    hi
    Son runoob
    
上一篇:数据结构专题-学习笔记:可并堆 - 左偏树


下一篇:题解 爆零