Code前端首页关于Code前端联系我们

Python子类继承父类构造函数的相关知识

terry 2年前 (2023-09-25) 阅读数 62 #后端开发

如果子类需要父类的构造函数,则必须显式调用父类的构造函数,或者不重写父类的构造函数。

子类不会覆盖 __init__。当子类实例化时,会自动调用父类定义的__init__。

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

输出结果为:

name: runoob
子runoob

如果重写__init__且子类是实例,则不会调用父类定义的__init__。语法格式如下:

class Father(object):
  def __init__(self, name):
    self.name=name
    print ( "name: %s" %( self.name) )
  def getName(self):
    return 'Father ' + self.name
 
class Son(Father):
  def __init__(self, name):
    print ( "hi" )
    self.name = name
  def getName(self):
    return 'Son '+self.name
 
if __name__=='__main__':
  son=Son('runoob')
  print ( son.getName() )

输出结果为:

hi
Son runoob

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

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

还有一种经典的写法:

父类名称.__init__(self,参数1,参数2,...)
class Father(object):
  def __init__(self, name):
    self.name=name
    print ( "name: %s" %( self.name))
  def getName(self):
    return 'Father ' + self.name
 
class Son(Father):
  def __init__(self, name):
    super(Son, self).__init__(name)
    print ("hi")
    self.name = name
  def getName(self):
    return 'Son '+self.name
 
if __name__=='__main__':
  son=Son('runoob')
  print ( son.getName() )

输出结果为:

name: runoob
hello
儿子runoob

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门