在蟒蛇2.x中,超級接受下列情況下爲什麼python super不接受實例?
class super(object)
| super(type) -> unbound super object
| super(type, obj) -> bound super object; requires isinstance(obj, type)
| super(type, type2) -> bound super object; requires issubclass(type2, type)
| Typical use to call a cooperative superclass method:
據我所見,超一類,包裝類型和(最終)實例解析類的超類。
我對幾件事情頗爲不解:
- 爲什麼也沒有
super(instance)
,具有典型的使用例如super(self).__init__()
。從技術上講,您可以從對象本身獲取對象的類型,因此當前策略super(ClassType, self).__init__()
是多餘的。我假定與舊式類或多重繼承存在兼容性問題,但我想聽聽你的觀點。 - 另一方面,爲什麼python 3會接受(見Understanding Python super() with __init__() methods)
super().__init__()
?在這方面我看到了一種魔法,違反明示比隱含的禪更好。我會看到更合適的self.super().__init__()
。
我想你的意思是B類(A):和C類(B): – 2009-12-24 12:47:49
然而,你是對的。它永遠無法從B調用A .__ init __(),因爲在方法B中.__ init __()self將是C類型的,它的直接super是B,而不是A.因此B .__ init __()會再次被調用。 – 2009-12-24 12:50:43
啊你對錯字說得對,謝謝!這在多重繼承方案中變得更加複雜,我想我可以找到一個關於這個的鏈接。 – u0b34a0f6ae 2009-12-24 15:57:34