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

笔记 

情况一:

        子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。

情况二:

        子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的__init__()的方法。

情况三:

        子类重写__init__()方法又需要调用父类的方法:使用super关键词:  super(子类,self).__init__(参数1,参数2,....)


class Son(Father):
  def __init__(self, name):   
    super(Son, self).__init__(name)

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

子类不重写 __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 d

    ef 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
发布了136 篇原创文章 · 获赞 71 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/u012308586/article/details/105063942