如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法 或者不重写父类的构造方法。

子类不重写 __init__ 实例化子类时 会自动调用父类定义的 __init__

实例

class Father(object):def __init__(self, name):self.name=nameprint ( "name: %s" %( self.name) )def getName(self):return 'Father ' + self.nameclass Son(Father):def getName(self):return 'Son '+self.nameif __name__=='__main__':son=Son('facesoho')print ( son.getName() )

输出结果为:

name: facesohoSon facesoho

如果重写了__init__ 时 实例化子类 就不会调用父类已经定义的 __init__ 语法格式如下:

实例

class Father(object):def __init__(self, name):self.name=nameprint ( "name: %s" %( self.name) )def getName(self):return 'Father ' + self.nameclass Son(Father):def __init__(self, name):print ( "hi" )self.name = namedef getName(self):return 'Son '+self.nameif __name__=='__main__':son=Son('facesoho')print ( son.getName() )

输出结果为:

hiSon facesoho

如果重写了__init__ 时 要继承父类的构造方法 可以使用 super 关键字:

super(子类 self).__init__(参数1 参数2 ....)

还有一种经典写法:

父类名称.__init__(self,参数1 参数2 ...)

实例

class Father(object):def __init__(self, name):self.name=nameprint ( "name: %s" %( self.name))def getName(self):return 'Father ' + self.nameclass Son(Father):def __init__(self, name):super(Son, self).__init__(name)print ("hi")self.name = namedef getName(self):return 'Son '+self.nameif __name__=='__main__':son=Son('facesoho')print ( son.getName() )

输出结果为:

name: facesohohiSon facesoho