Python中的super使用

2021-07-13 12:25:14 字數 1465 閱讀 2138

super 是用來解決多重繼承問題的,直接用類名呼叫父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查詢順序(mro)、重複呼叫(鑽石繼承)等種種問題。總之前人留下的經驗就是:保持一致性。要不全部用類名呼叫父類,要不就全部用 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')

從執行結果上看,普通繼承和super繼承是一樣的。但是其實它們的內部執行機制不一樣,這一點在多重繼承時體現得很明顯。在super機制裡可以保證公共父類僅被執行一次,至於執行的順序,是按照mro進行的(e.__mro__)。

Python中super 方法的使用

如果在子類中也定義了構造器,既 init 函式,那麼基類的構造器該如何呼叫呢?方法 一 明確指定 使用乙個子類的例項去呼叫基類的構造器,在子類的構造器中明確的指明呼叫基類的構造器。class c p def init self p.init self print calling cs constru...

Python中super 方法的使用

先看一段 class stmatrix object 定義乙個類 docstring for stmatrix def init self,data,timestamps,t 24,checkcomplete true 建構函式 super stmatrix,self init super表繼承,這...

python的類中super()的使用

ote super only works for new style classes.super 函式的乙個常見用法是在 init 方法中確保父類被正確的初始化了作用 super 函式是子類用於呼叫父類 超類 的乙個方法。super 是用來解決多重繼承問題的,直接用類名呼叫父類 base.init ...