您的位置:首页 > 脚本大全 > > 正文

python继承重写构造函数(Python子类继承父类构造函数详解)

更多 时间:2022-01-25 00:20:38 类别:脚本大全 浏览量:1407

python继承重写构造函数

Python子类继承父类构造函数详解

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

子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 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__,语法格式如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 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 关键字:

  • ?
  • 1
  • super(子类,self).__init__(参数1,参数2,....)
  • 还有一种经典写法:

  • ?
  • 1
  • 父类名称.__init__(self,参数1,参数2,...)
  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 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

    您可能感兴趣