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

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

多重繼承的時候需要用super函數的問題

請問如果在多重繼承的時候需要用super函數來繼承的兩個屬性或者類方法分別來自于兩個父類,應該要怎么寫super函數?比如grade和interest分別來自于A和B

class?C(A,?B):
????def?__init__(self,?grade,?interest):
????????super(C,?self).__init__(grade,?interest)

這樣寫會不會出問題,萬一A和B中都有grade 和interest屬性呢?

正在回答

1 回答

In?[14]:?class?A(object):
???....:?????def?__init__(self,?grade,?interest):
???....:?????????print?"I?am?an?instance?of?A"
???....:?????????self.grade?=?grade
???....:?????????self.interest?=?interest
???....:

In?[15]:?class?B(object):
???....:?????def?__init__(self,?grade,?interest):
???....:?????????print?"I?am?an?instance?of?B"
???....:?????????self.grade?=?grade
???....:?????????self.interest?=?interest
???....:

In?[16]:?class?C(A,?B):
???....:?????def?__init__(self,?grade,?interest):
???....:?????????print?"I?am?an?instance?of?C"
???....:?????????super(C,self).__init__(grade,?interest)
???....:

In?[17]:?c?=?C("1","football")
I?am?an?instance?of?C
I?am?an?instance?of?A

自己編個小例子就可以看到解答了,這樣寫的“后果”就是B的__init__沒有被調用,我試了其他例子,好像python都只用最近的那個父類,比如A。

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

catdav

這個問題我也發現了,好像在多重繼承中super只會返回第一個父類,其他父類的__init__沒有調用。 在你的例子中,class C(A,B),則super(C,self)返回的是父類A,不會返回父類B;如果改成class C(B,A),則super(C,self)返回的就是父類B,有變成不返回A了。
2015-12-17 回復 有任何疑惑可以回復我~
#2

ywang04 回復 catdav

測試過 同樣的結果
2016-07-05 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

多重繼承的時候需要用super函數的問題

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

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

幫助反饋 APP下載

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

公眾號

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