亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

如果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

這樣不行,應該怎么做?

正在回答

5 回答

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,c):
????????super(C,?self).__init__(a)
????????print?'init?C...'
????????self.c?=?c
?
class?D(B,?C):
????def?__init__(self,a,d):
????????(D,?self).__init__
????????print?'init?D...'
????????self.d?=?d


0 回復 有任何疑惑可以回復我~
#1

qq_蘇格拉沒有底_14

你這是什么鬼
2017-08-19 回復 有任何疑惑可以回復我~

?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 沒法判斷使用哪個 會出錯。

樓主的代碼還有些小錯誤,可以自己排查下

0 回復 有任何疑惑可以回復我~

不用super直接全部改成B.__init__(self, a, b)這種方式測試可以通過

0 回復 有任何疑惑可以回復我~
#1

qq_蘇格拉沒有底_14

也不行的
2017-08-19 回復 有任何疑惑可以回復我~

這是一個好問題 ,沒有那么簡單,再看看

0 回復 有任何疑惑可以回復我~
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):???<-----?這個地方應該是?a,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

A,B,C中都定義了新的屬性。在D中如何使用super傳參初始化?

我理解A是父類,B和C 都是A的子類,而D是B,C的子類。super傳遞參數的,需要把A,B,C的都傳遞進來就可以,當然A是父類的父類,所以寫一次就好。具體可以編寫一個測試一下。

0 回復 有任何疑惑可以回復我~
#1

Maxmengt

不知道您有沒有試過?因為我的是不行的...
2016-02-13 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255563    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

如果D繼承自B,C,而B,C繼承自A。A,B,C中都定義了新的屬性。在D中如何使用super傳參初始化?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號