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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于python多重繼承初始化問題

關于python多重繼承初始化問題

Maxmengt 2016-02-13 14:55:00
class?A(object): ????def?__init__(self,?a): ????????print?'__init__?A',?str(a) ????????self.A?=?a class?B(A): ????def?__init__(self,?a,?b): ????????super(B,?self).__init__(a) ????????print?'__init__B',?str(b) ????????self.B?=?b ???????? class?C(A): ????def?__init__(self,?a,?c): ????????super(C,?self).__init__(a) ????????print?'__init__C',?str(c) ????????self.C?=?c class?D(B,?C): ????def?__init__(self,?a,?b,?c): ????????super(D,?self).__init__(a,?b,?c) ????????print?'__init__D',?str(d) ????????self.D?=?d shanghe?=?D('x',?'y',?'z',?'k')Traceback (most recent call last):? File "code", line 24, in <module>? ? shanghe = D('x', 'y', 'z', 'k')TypeError: __init__() takes exactly 4 arguments (5 given)請教這份代碼錯在哪里?
查看完整描述

1 回答

?
清波

TA貢獻165條經驗 獲得超90個贊

首先用super超類初始化多重繼承時,容易引起多次繼承某些祖先類,比如說樓主代碼中的 class A。

其次利用super超類在進行初始化過程中 也遵循 MRO(Method Resolution Order),所以比較適合一些單線繼承,樓主的代碼其實有點Mixin (mix in)混入的意思,從多個祖先類繼承。這是就不能用super了,應該用:

ParentClassName.__init__(self,args)

另外,原則上不建議把繼承寫的太復雜。拙見,求各路大神拍磚指正

查看完整回答
反對 回復 2016-03-08
  • 1 回答
  • 0 關注
  • 3936 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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