Python子类继承父类构造函数详解
如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。
子类不重写__init__,实例化子类时,会自动调用父类定义的__init__。
classFather(object): def__init__(self,name): self.name=name print("name:%s"%(self.name)) defgetName(self): return'Father'+self.name classSon(Father): defgetName(self): return'Son'+self.name if__name__=='__main__': son=Son('runoob') print(son.getName())
输出结果为:
name:runoob
Sonrunoob
如果重写了__init__时,实例化子类,就不会调用父类已经定义的__init__,语法格式如下:
classFather(object): def__init__(self,name): self.name=name print("name:%s"%(self.name)) defgetName(self): return'Father'+self.name classSon(Father): def__init__(self,name): print("hi") self.name=name defgetName(self): return'Son'+self.name if__name__=='__main__': son=Son('runoob') print(son.getName())
输出结果为:
hi
Sonrunoob
如果重写了__init__时,要继承父类的构造方法,可以使用super关键字:
super(子类,self).__init__(参数1,参数2,....)
还有一种经典写法:
父类名称.__init__(self,参数1,参数2,...)
classFather(object): def__init__(self,name): self.name=name print("name:%s"%(self.name)) defgetName(self): return'Father'+self.name classSon(Father): def__init__(self,name): super(Son,self).__init__(name) print("hi") self.name=name defgetName(self): return'Son'+self.name if__name__=='__main__': son=Son('runoob') print(son.getName())
输出结果为:
name:runoob
hi
Sonrunoob