(1) 如果在子类中需要的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。
子类不重写__init__,实例化子类时,会自动调用父类定义的__init__。
实例:
class Father(object):
def __init__(self, age):
self.age=age
print ( "age: %d" %( self.age) )
def getAge(self):
print('父类的返回结果')
return self.age
class Son(Father):
def getAge(self):
print('子类的返回结果:')
return self.age
if __name__=='__main__':
son=Son(18)
print ( son.getAge() )
输出结果:
age: 18
子类的返回结果:
18
子类没有初始化__init__ 方法,所以默认会自动调用父类定义的__init__,因此会出现一行:age: 18
(2)如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__
实例
class Father(object):
def __init__(self, age):
self.age=age
print ( "age: %d" %( self.age) )
def getAge(self):
return self.age
class Son(Father):
def __init__(self, age):
print ( "hello world" )
self.age = age
def getAge(self):
return self.age
if __name__=='__main__':
son=Son(18)
print (son.getAge() )
输出结果:
hello world
18
子类有初始化__init__ 方法,则会调用自身的初始化方法,因此不会出现上面实例中那样的:age: 18
(3)如果重写了__init__时,要继承父类的构造方法,可以使用super关键字:
super(子类,self).__init__(参数1,参数2,....)
或者另一种经典的方法:
父类名称.__init__(self,参数1,参数2,...)
实例:
class Father(object):
def __init__(self, age):
self.age=age
print ( "name: %s" %( self.age))
def getage(self):
return self.age
class Son(Father):
def __init__(self, age):
# super(Son, self).__init__(age) # 1:super方法
Father.__init__(self,age) # 2: 经典方法
print ("hello world")
self.age = age
def getage(self):
return self.age
if __name__=='__main__':
son=Son(18)
print ( son.getage() )
输出结果:
name: 18
hello world
18
可以看到,会出现父类中的初始化输出结果: name: 18,也会出现子类初始化中输出结果:hello world
本文深入探讨了Python中子类继承父类时构造方法的调用机制,包括子类如何自动调用父类的构造方法,重写构造方法的影响,以及如何通过super关键字正确调用父类构造方法。

4298

被折叠的 条评论
为什么被折叠?



