Python 子类继承父类构造函数说明

本文深入探讨了Python中子类继承父类时构造方法的调用机制,包括子类如何自动调用父类的构造方法,重写构造方法的影响,以及如何通过super关键字正确调用父类构造方法。

(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值