Python super()方法原理详解

  

在学习Python类的时候,会碰见类中有__init__()这样一个函数,其实它就是Python的构造方法。

  

构造方法类似于类似init()这种初始化方法,来初始化新创建对象的状态,在一个对象创建后会立即调用,比如像实例化一个类:

  
  

f=FooBar ()
  f.init() #手动初始化
  

     

使用构造方法就能让它简化成如下形式:对象创建后自动调用魔法方法__init__(),对对象进行初始化操作

  

<代码> f=FooBar()
  

  

在明白了构造方法之后,来点进阶的问题,那就是父类的构造方法中的初始值无法继承的问题。

        类鸟:   def __init__(自我):   自我。饿了=True   def吃(自我):   如果self.hungry:   打印“Ahahahah”   其他:   打印“不,谢谢!”      类SongBird(鸟):   def __init__(自我):   自我。声音=八呖唷?   def唱(自我):   打印self.song ()      某人=SongBird ()   sb.sing() #能正常输出   sb.eat() #报错,因为songgird中没有饥饿的特性      

解决这个问题的办法有两种:

  

1,调用未绑定的超类构造方法(不推荐)

        类SongBird(鸟):   def __init__(自我):   Bird.__init__(自我)#   自我。声音=八呖唷?   def唱(自我):   打印self.song ()      

原理:在调用了一个实例的方法时,该方法的自我参数会自动绑定到实例上(称为绑定方法);如果直接调用类的方法(比如Bird.__init__),那么就没有实例会被绑定,可以自由提供需要的自我参数(未绑定方法)。

  

2,使用超级函数(推荐)

        类SongBird(鸟):   def __init__(自我):   超级(SongBird,自我). __init__ ()   自我。声音=八呖唷?   def唱(自我):   打印self.song ()      

原理:它会查找所有的超类,以及超类的超类,直到找到所需的特性为止。

  

super()函数是用于调用父类(超类)的一个方法。

  

超级是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO),重

  

复调用(钻石继承)等种种问题。

  

MRO就是类的方法解析顺序表,其实也就是继承父类方法时的顺序表。(菜鸟文档)

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Python super()方法原理详解