python中super()⽅法的解释
菜鸟编辑器python在学习 Python 类的时候,会碰见类中有 __init__() 这样⼀个函数,其实它就是 Python 的构造⽅法。
构造⽅法类似于类似 init() 这种初始化⽅法,来初始化新创建对象的状态,在⼀个对象创建后会⽴即调⽤,⽐如像实例化⼀个类:
f = FooBar()
f.init()#⼿动初始化
使⽤构造⽅法就能让它简化成如下形式:对象创建后⾃动调⽤魔法⽅法__init__(),对对象进⾏初始化操作
f = FooBar()
在明⽩了构造⽅法之后,来点进阶的问题,那就是⽗类的构造⽅法中的初始值⽆法继承的问题。
class Bird:
def__init__(self):
self.hungry = True
def eat(self):
if self.hungry:
print'Ahahahah'
else:
print'No thanks!'
class SongBird(Bird):
def__init__(self):
self.sound = 'Squawk'
def sing(self):
print self.song()
sb = SongBird()
sb.sing()    # 能正常输出
sb.eat()    # 报错,因为 songgird 中没有 hungry 特性
解决这个问题的办法有两种:
1、调⽤未绑定的超类构造⽅法(不推荐)
class SongBird(Bird):
def__init__(self):
Bird.__init__(self) #
self.sound = 'Squawk'
def sing(self):
print self.song()
原理:在调⽤了⼀个实例的⽅法时,该⽅法的self参数会⾃动绑定到实例上(称为绑定⽅法);如果直
接调⽤类的⽅法(⽐如Bird.__init__),那么就没有实例会被绑定,可以⾃由提供需要的self参数(未绑定⽅法)。
2、使⽤super函数(推荐)
class SongBird(Bird):
def__init__(self):
super(SongBird,self).__init__()
self.sound = 'Squawk'
def sing(self):
print self.song()
原理:它会查所有的超类,以及超类的超类,直到到所需的特性为⽌。
super() 函数是⽤于调⽤⽗类(超类)的⼀个⽅法。
super 是⽤来解决多重继承问题的,直接⽤类名调⽤⽗类⽅法在使⽤单继承的时候没问题,但是如果使⽤多继承,会涉及到查顺序(MRO)、重
复调⽤(钻⽯继承)等种种问题。
MRO 就是类的⽅法解析顺序表, 其实也就是继承⽗类⽅法时的顺序表。(菜鸟⽂档)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。