第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

具有 kwargs 的多重繼承

具有 kwargs 的多重繼承

大話西游666 2022-08-16 16:39:35
問題我在Dusty Phillips的面向?qū)ο缶幊讨杏龅搅诉@個(gè)代碼(為簡(jiǎn)潔起見進(jìn)行了簡(jiǎn)化),我不確定這個(gè)定義的特定部分。class A:    def __init__(self, a, **kwargs):        super().__init__(**kwargs)        self.a = aclass B:    def __init__(self, b, **kwargs):        super().__init__(**kwargs)        self.b = bclass C(A, B):    def __init__(self, c, **kwargs):        super().__init__(**kwargs)        self.c = c問題由于方法解析順序?yàn)?,可以按以下方式定義嗎?(__main__.C, __main__.A, __main__.B, object)class Bclass B:    def __init__(self, b):        self.b = b難道不是多余的,因?yàn)槿魏斡鄠鬟f到都會(huì)傳遞到,提高?super().__init__(**kwargs)class BkwargsCobjectTypeError:object.__init__() 只接受一個(gè)參數(shù)(要初始化的實(shí)例)這是否是如果被定義為而不是?Cclass C(B, A)class C(A, B)
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

考慮如何實(shí)例化:C

c = C(a=3, b=5, c=9)

C.__init__獲取所有關(guān)鍵字參數(shù),但僅將關(guān)鍵字參數(shù)用于其自己的參數(shù)。其余的將傳遞給鏈中的下一個(gè)方法。在本例中,即 ,它“拉出”的參數(shù)并傳遞給 。 使用它并將(現(xiàn)在為空的)關(guān)鍵字參數(shù)集傳遞給下一個(gè)方法 。由于所有關(guān)鍵字參數(shù)都已“聲明”并由其他類處理,因此會(huì)成功。c__init__A.__init__abB.__init__Bobject.__init__object.__init__

由于 MRO 的構(gòu)造方式,正確使用的類保證在調(diào)用時(shí)集體為空。super()**kwargsobject.__init__


查看完整回答
反對(duì) 回復(fù) 2022-08-16
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

由于方法解析順序?yàn)?,可以按以下方式定義嗎?(__main__.C, __main__.A, __main__.B, object)class B


否,因?yàn)檫@樣會(huì)失敗:


class D:

    def __init__(self, d, **kwargs):

        self.d = d

        super().__init__(**kwargs)


class E(C, D):

    def __init__(self, e, **kwargs):

        self.e = e

        super().__init__(**kwargs)

的 MRO 是 ,所以必須調(diào)用,否則不會(huì)被調(diào)用。E(E, C, A, B, D, object)Bsuper().__init__D.__init__


難道不是多余的,因?yàn)槿魏斡鄠鬟f到都會(huì)傳遞到,提高?super().__init__(**kwargs)class BkwargsCobject


不,因?yàn)樵谏厦娴睦又?,盈余將流向。但即使沒有這個(gè),當(dāng)你調(diào)用一個(gè)參數(shù)太多構(gòu)造函數(shù)時(shí),引發(fā)錯(cuò)誤也不是多余的;最好有一條錯(cuò)誤消息通知您不正確的代碼,而不是讓錯(cuò)誤未被發(fā)現(xiàn)。kwargsD.__init__


這是否是如果被定義為而不是?Cclass C(B, A)class C(A, B)


從某種意義上說,當(dāng)然;但實(shí)際上,它是在任何類層次結(jié)構(gòu)中發(fā)生的保護(hù)措施,只要層次結(jié)構(gòu)中的其他類遵循相同的調(diào)用規(guī)則。Bsuper().__init__(**kwargs)


查看完整回答
反對(duì) 回復(fù) 2022-08-16
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊

在這個(gè)例子中,如果它像你說的那樣定義(第1點(diǎn))并且是原樣的(并且沒有其他用途),那么它的工作原理是一樣的。BC


至于第2點(diǎn):如果還剩下關(guān)鍵字參數(shù),那么對(duì)構(gòu)造函數(shù)的調(diào)用確實(shí)會(huì)失敗,例如:super()


c = C(a=1, b=2, c=3, d=4)

# -> TypeError: object.__init__() takes exactly one argument (the instance to initialize)

由于該類(最初)是編寫的,因此如果像您所說的那樣以相反的順序使用,或者如果有一個(gè)(或)多個(gè)超類(es),也是可以的,例如:B


class D:

    def __init__(self, d, **kwargs):

        super().__init__(**kwargs)

        self.d = d


class C(A,B,D):

    ...


查看完整回答
反對(duì) 回復(fù) 2022-08-16
  • 3 回答
  • 0 關(guān)注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)