如果D繼承自B,C,而B,C繼承自A。A,B,C中都定義了新的屬性。在D中如何使用super傳參初始化?
class?A(object): ????def?__init__(self,?a): ????????print?'init?A...' ????????self.a?=?a class?B(A): ????def?__init__(self,?a?,?b): ????????super(B,?self).__init__(a) ????????print?'init?B...' ????????self.b?=?b class?C(A): ????def?__init__(self,?a,b,c): ????????super(C,?self).__init__(a) ????????print?'init?C...' ????????self.c?=?c class?D(B,?C): ????def?__init__(self,?a,b,c,d): ????????super(D,?self).__init__(a,b,c) ????????print?'init?D...' ????????self.d?=?d
這樣不行,應該怎么做?
2016-12-04
2016-05-02
?super(D,?self).__init__(a,b,c) 這個語句,不適應多重繼承。 這個沒法不知道自己要繼承B或C,會報錯。
建議用C.__init__(self,a,b,c)這個代表 只繼承C的abc屬性,此時不用再寫個繼承B.__init__(self,a,b)這樣 你同時繼承 兩個類的a 和 b ,D 沒法判斷使用哪個 會出錯。
樓主的代碼還有些小錯誤,可以自己排查下
2015-12-27
不用super直接全部改成B.__init__(self, a, b)這種方式測試可以通過
2015-12-24
這是一個好問題 ,沒有那么簡單,再看看
2015-12-24
A,B,C中都定義了新的屬性。在D中如何使用super傳參初始化?
我理解A是父類,B和C 都是A的子類,而D是B,C的子類。super傳遞參數的,需要把A,B,C的都傳遞進來就可以,當然A是父類的父類,所以寫一次就好。具體可以編寫一個測試一下。