super 是用來(lái)解決多重繼承問(wèn)題的,直接用類(lèi)名調(diào)用父類(lèi)方法在使用單繼承的時(shí)候沒(méi)問(wèn)題,但是如果使用多繼承,會(huì)涉及到查找順序(MRO)、重復(fù)調(diào)用(鉆石繼承)等種種問(wèn)題。總之前人留下的經(jīng)驗(yàn)就是:保持一致性。要不全部用類(lèi)名調(diào)用父類(lèi),要不就全部用 super,不要一半一半。
普通繼承
代碼如下:
class FooParent(object):
def __init__(self):
self.parent = 'I/'m the parent.'
print 'Parent'
def bar(self,message):
print message, 'from Parent'
class FooChild(FooParent):
def __init__(self):
FooParent.__init__(self)
print 'Child'
def bar(self,message):
FooParent.bar(self,message)
print 'Child bar function.'
print self.parent
if __name__=='__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
super繼承
代碼如下:
class FooParent(object):
def __init__(self):
self.parent = 'I/'m the parent.'
print 'Parent'
def bar(self,message):
print message,'from Parent'
class FooChild(FooParent):
def __init__(self):
super(FooChild,self).__init__()
print 'Child'
def bar(self,message):
super(FooChild, self).bar(message)
print 'Child bar fuction'
print self.parent
if __name__ == '__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
程序運(yùn)行結(jié)果相同,為:
代碼如下:
Parent
Child
新聞熱點(diǎn)
疑難解答
圖片精選