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

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

對(duì)于新樣式的類(lèi),super()引發(fā)“ TypeError:必須是類(lèi)型,而不是classobj”

對(duì)于新樣式的類(lèi),super()引發(fā)“ TypeError:必須是類(lèi)型,而不是classobj”

人到中年有點(diǎn)甜 2019-12-06 11:06:12
以下用法super()引發(fā)TypeError:為什么?>>> from  HTMLParser import HTMLParser>>> class TextParser(HTMLParser):...     def __init__(self):...         super(TextParser, self).__init__()...         self.all_data = []...         >>> TextParser()(...)TypeError: must be type, not classobj在StackOverflow上有一個(gè)類(lèi)似的問(wèn)題:Python super()引發(fā)TypeError,該錯(cuò)誤由用戶(hù)類(lèi)不是新型類(lèi)的事實(shí)來(lái)解釋。但是,上面的類(lèi)是一種新式的類(lèi),因?yàn)樗^承自object:>>> isinstance(HTMLParser(), object)True我想念什么?我如何super()在這里使用?使用HTMLParser.__init__(self)代替super(TextParser, self).__init__()可以工作,但是我想了解TypeError。PS:Joachim指出,成為一個(gè)新類(lèi)實(shí)例并不等同于成為一個(gè)實(shí)例object。我讀了很多相反的書(shū),因此感到困惑(基于object實(shí)例測(cè)試的新型類(lèi)實(shí)例測(cè)試的示例:https : //stackoverflow.com/revisions/2655651/3)。
查看完整描述

3 回答

?
Smart貓小萌

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

super()僅可用于新型類(lèi),這意味著根類(lèi)需要從'object'類(lèi)繼承。


例如,頂級(jí)類(lèi)需要像這樣:


class SomeClass(object):

    def __init__(self):

        ....


class SomeClass():

    def __init__(self):

        ....

因此,解決方案是直接調(diào)用父級(jí)的init方法,如下所示:


class TextParser(HTMLParser):

    def __init__(self):

        HTMLParser.__init__(self)

        self.all_data = []



查看完整回答
反對(duì) 回復(fù) 2019-12-07
?
慕勒3428872

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

問(wèn)題是super需要object一個(gè)祖先:


>>> class oldstyle:

...     def __init__(self): self.os = True


>>> class myclass(oldstyle):

...     def __init__(self): super(myclass, self).__init__()


>>> myclass()

TypeError: must be type, not classobj

經(jīng)過(guò)仔細(xì)檢查,發(fā)現(xiàn):


>>> type(myclass)

classobj

但:


>>> class newstyle(object): pass


>>> type(newstyle)

type    

因此,解決問(wèn)題的方法是從對(duì)象以及HTMLParser繼承。但是確保對(duì)象在MRO類(lèi)中排在最后:


>>> class myclass(oldstyle, object):

...     def __init__(self): super(myclass, self).__init__()


>>> myclass().os

True




查看完整回答
反對(duì) 回復(fù) 2019-12-07
  • 3 回答
  • 0 關(guān)注
  • 316 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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