https://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods
StackOverflow上的這個問題很是有價值,有1900+的star 做者舉出了本身的例子,大意是代碼不須要super也能實現這樣的邏輯,爲何要無故引入super呢?下面都個1300+讚的回答,他的回答要點是:html
回答中引用了這篇博文:
https://www.artima.com/weblogs/viewpost.jsp?thread=236275 這篇文章我暫時沒有足夠的時間去理解它。python
第二個回答 https://stackoverflow.com/a/27134600/7360457 強調了:super的重要不在於避免寫出父類,而是在於確保方法引用順序(MRO)被調用,而且答主給出了代碼解釋。多繼承時(若是不使用),第一個父類的__init__被調用了,可是第二類的__int__沒有被調用,僅僅執行了一個。web
個人結論:super在多繼承時扮演着很是重要的角色,多繼承時,super函數告訴咱們會MRO的解析順序列表中查找下個父類的方法,供子類去使用。每執行一次,就對MRO調用了一次nextapp
http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html
博客園的這篇文章也提到了爲何要用super?jsp
很好理解去從父類中繼承(屬性或者方法),可是我不理解爲何要繼承自身?函數
class Mmap(object): """ Convenience class for opening a read-only memory map for a file path. """ def __init__(self, filename): super(Mmap, self).__init__() # 繼承父類的方法 self._filename = filename self._f = None self._mmap = None def __enter__(self): self._f = open(self._filename, "rb") self._mmap = mmap.mmap(self._f.fileno(), 0, access=mmap.ACCESS_READ) return self._mmap def __exit__(self, type, value, traceback): self._mmap.close() self._f.close()
super(Mmap, self).__init__() 的解釋:https://stackoverflow.com/questions/576169/understanding-python-super-with-init-methodspost