首页 > 技术文章 > Python子类继承父类的构造函数

tahitimoon 2021-09-24 21:52 原文

前言

子类继承父类的构造函数__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
    

推荐阅读