Python子类继承父类构造函数的三种实现方式
本文详解Python中子类继承父类构造函数的三种场景:不重写__init__时自动调用、重写__init__时父类构造被忽略,以及使用super或父类名显式调用父类构造。通过Father与Son类的代码示例,展示不同实现下的输出结果及注意事项,帮助开发者正确处理类初始化逻辑。
若子类需要保留父类的构造逻辑,必须显式调用父类的构造方法,或者选择不重写父类的构造方法。
当子类未定义 __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 Son 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 hi Son runoob
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









