![](/img/trans.png)
[英]Multiple inheritance using Super(Subclass, self) in python 2.7
[英]calling super subclass in python 2.7
我正在嘗試了解python中的一些基本OOP。 如果我嘗試對諸如list之類的類進行子類化,該如何調用父構造函數? 修補了片刻之后,我發現它是:
super(subclass_name, self).__init__(args).
但是我不直觀地理解這一點。 為什么我不能只列出(args)? 要么
list.__init__(args)?
以下是相關代碼段:
class slist(list):
def __init__(self, iterable):
#super(slist, self).__init__(iterable) <--- This works)
list.__init__(iterable) # This does not work
self.__l = list(iterable)
def __str__(self):
return ",".join([str(s) for s in self.__l])
list.__init__(iterable)
缺少其中列出來初始化信息,並list(iterable)
建立不同的名單完全無關你想初始化一個。
如果您不想使用super
,則可以執行list.__init__(self, iterable)
。
list.__init__(iterable)
不正確。 您需要告訴__init__()
它正在初始化哪個對象。 list(args)
更不正確,因為它創建了一個全新的列表對象,而不是初始化您的對象。 它調用list.__new__()
而不是list.__init__()
。 您需要將self
傳遞給構造函數調用以正確初始化父類:
list.__init__(self, args)
那會起作用。 盡管通常使用super()
可以使語法更簡潔。 例如,以上內容可以重寫為:
super(slist, self).__init__(args)
但是,鼓勵您使用super()
而不是簡單地調用父構造函數,主要原因是您具有多個繼承。 super()
將自動以正確的順序調用每個父類的構造函數。 這與Python的“ 方法解析順序”密切相關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.