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

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

關(guān)于python的元類的問(wèn)題

關(guān)于python的元類的問(wèn)題

寶慕林4294392 2019-02-24 04:10:08
最近在學(xué)習(xí)元類。 #python3 # coding=utf-8 class ModelMetaclass(type): def __new__(cls, name, bases, attrs): print("ainia") return type.__new__(cls, name, bases, attrs) class BBB: def __new__(cls, name, bases, attrs): print("BBBBB") return object.__new__(cls, name, bases, attrs) class Model(metaclass=BBB): pass class Model2(metaclass=ModelMetaclass): pass #python2 # coding=utf-8 class ModelMetaclass(type): def __new__(cls, name, bases, attrs): print("ainia") return type.__new__(cls, name, bases, attrs) class BBB(object): def __new__(cls, name, bases, attrs): print("BBBBB") return object.__new__(cls, name, bases, attrs) class Model(object): __metaclass__ = BBB pass class Model2(object): __metaclass__ = ModelMetaclass pass 以上代碼另存為test.py,中運(yùn)行時(shí)提示: Traceback (most recent call last): File "test2.py", line 18, in <module> class Model(metaclass=BBB): File "test2.py", line 15, in __new__ return object.__new__(cls, name, bases, attrs) TypeError: object() takes no parameters 但是如果我把return object.__new__(cls, name, bases, attrs)修改為return object.__new__(cls)卻可以正常輸出。還請(qǐng)各位指教?
查看完整描述

3 回答

?
慕尼黑5688855

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

metaclass必須要從type繼承。上面的Model在Python2.7下有語(yǔ)法錯(cuò)誤,在Python3中可以產(chǎn)生Model Class但無(wú)法進(jìn)行實(shí)例話。在Python3中可以順利產(chǎn)生Model Class的原因我猜想可能是 “object是type的基類”的原因。

查看完整回答
反對(duì) 回復(fù) 2019-03-04
?
慕桂英546537

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

改成這樣,new方法里object改成type.

class BBB(type):

    def __new__(cls, name, bases, attrs):
        print("BBBBB")
        return type.__new__(cls, name, bases, attrs)


class Model():
    __metaclass__ = BBB
查看完整回答
反對(duì) 回復(fù) 2019-03-04
?
30秒到達(dá)戰(zhàn)場(chǎng)

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

這是我修改過(guò)的代碼:
python2下通過(guò)

# coding=utf-8
class ModelMetaclass(type):
    def __new__(cls, name, bases, attrs):
        print("ainia")
        return type.__new__(cls, name, bases, attrs)
class BBB(type):
    def __new__(cls, name, bases, attrs):
        print("BBBBB")
        return type.__new__(cls, name, bases, attrs)
class Model:
    __metaclass__ = BBB
class Model2:
    __metaclass__ = ModelMetaclass

關(guān)于python的元類解釋,推薦你看一篇文章,講解非常清楚,
傳送門(mén): 深刻理解Python中的元類(metaclass)

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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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