python中元類、類對(duì)象锯梁、實(shí)例對(duì)象的創(chuàng)建

1即碗、metaclass有兩個(gè)個(gè)作用域 類中、模塊中對(duì)應(yīng)的在本地類作用和在當(dāng)前模塊中所有的類中作用

同時(shí)metacalss的查找順序是 當(dāng)前類中陌凳、父類中拜姿、當(dāng)前模塊中查找metaclass。

2冯遂、查找到metaclass后蕊肥、首先使用type創(chuàng)建類對(duì)象、之后使用__call__函數(shù)創(chuàng)建類對(duì)象的實(shí)例對(duì)象。

3壁却、創(chuàng)建類對(duì)象的時(shí)候始終使用 type類型的類對(duì)象.__new__函數(shù)創(chuàng)建類對(duì)象批狱、之后調(diào)用 type類型的類對(duì)象.__init__函數(shù)初始化類對(duì)象、但是最終創(chuàng)建類對(duì)象的是type.__new__的元類函數(shù)創(chuàng)建類對(duì)象展东。其中__new__的參數(shù)包括(元類類型cls赔硫,類名,父類元組()盐肃,類的屬性字典)爪膊。

4、當(dāng)我們使用剛創(chuàng)建的類對(duì)象實(shí)例化時(shí) Foo()時(shí) 調(diào)用時(shí)最終使用的是type.__call__函數(shù)創(chuàng)建的實(shí)例對(duì)象砸王,中間可能會(huì)使用自己定義在元類類型中的__call__函數(shù)來執(zhí)行一些動(dòng)作推盛,但最終還是由type.__call__來創(chuàng)建、type元類直接和c語言對(duì)接【猜測(cè)】

5谦铃、我們可以通過修改繼承type元類的元類類型中的 __new__ 耘成、 __init__、 __call__私用方法來操作類對(duì)象的創(chuàng)建驹闰、類對(duì)象對(duì)應(yīng)的實(shí)例對(duì)象瘪菌。

6、所有的__new__函數(shù)必須有返回值嘹朗、__init__函數(shù)不能有返回值貨值返回值是None师妙。

這是使用type.__call__時(shí)的運(yùn)行代碼、自動(dòng)調(diào)用類對(duì)象的__new__屹培、__init__函數(shù)



import pprintas pp

name='wang'

class meta1(type):

? def __new__(cls, *args, **kwargs):

? ? ? pp.pprint('自己創(chuàng)建元類')

? ? ? return type.__new__(cls, *args, **kwargs)

? def __init__(self,class_name,class_bases,class_attr):

? ? ? # self.name1是類對(duì)象屬性

? ? ? self.name1='zhong'

? ? ? pp.pprint('下面3行是類名默穴、父類、類對(duì)象的屬性')

? ? ? pp.pprint(class_name)

? ? ? pp.pprint(class_bases)

? ? ? pp.pprint(class_attr)

? #? 這里的call會(huì)攔截類中定義的__new__惫谤、__init__對(duì)象

? def __call__(self, *args, **kwargs):

? ? ? pp.pprint('call')

? ? ? # self.name1是類對(duì)象屬性

? ? ? pp.pprint(self.name1)

? ? ? pp.pprint(id(self))

? ? ? # 執(zhí)行type.__call__(self, *args, **kwargs)時(shí)候 會(huì)自動(dòng)調(diào)用類對(duì)象中的__new__壁顶、__init__函數(shù)

? ? ? obj=type.__call__(self, *args, **kwargs)

? ? ? # obj=object.__new__(self)

# obj=self.__new__(self,*args, **kwargs)

# pp.pprint('++++++++')

# self.__init__(self,*args, **kwargs)

? ? ? pp.pprint(id(obj))

? ? ? return obj

pp.pprint('yyyyyyyyyyyy')

class t1(object,metaclass=meta1):

? def f1(self):

? ? ? pp.pprint('lei de chuang jian ')

? def __new__(cls, *args, **kwargs):

? ? ? print('class? ? ***8')

? ? ? return object.__new__(cls)

? def __init__(self,name):

? ? ? self.name12='jjjj'

? ? ? print('classinit')

pp.pprint('uuuuuuuuuuuuuuuuuu')

if __name__=='__main__':

? pp.pprint('88888')

? # pp.pprint(dir(t1))

? pp.pprint(id(t1))

? ff=t1('cheng')

? pp.pprint(ff.name12)

? pp.pprint(id(ff))

? # ff是類的實(shí)例化對(duì)象,不是類對(duì)象所以沒有name1屬性溜歪。

? # pp.pprint(ff.name1)



這是輸出結(jié)果:

'yyyyyyyyyyyy'

'自己創(chuàng)建元類'

'下面3行是類名若专、父類、類對(duì)象的屬性'

't1'

(<class 'object'>,)

{'__init__': <function t1.__init__ at 0xb77c292c>,

'__module__': '__main__',

'__new__': <function t1.__new__ at 0xb77c28e4>,

'__qualname__': 't1',

'f1': <function t1.f1 at 0xb77c289c>}

'uuuuuuuuuuuuuuuuuu'

'88888'

3078373884

'call'

'zhong'

3078373884

class? ? ***8

classinit

3079005772

'jjjj'

3079005772



參考的文章如下

__call__ 在元類中作用

深入理解python中的元類

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝴猪,一起剝皮案震驚了整個(gè)濱河市调衰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌自阱,老刑警劉巖嚎莉,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異沛豌,居然都是意外死亡趋箩,警方通過查閱死者的電腦和手機(jī)赃额,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叫确,“玉大人跳芳,你說我怎么就攤上這事≈衩悖” “怎么了飞盆?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長次乓。 經(jīng)常有香客問我吓歇,道長,這世上最難降的妖魔是什么票腰? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任城看,我火速辦了婚禮,結(jié)果婚禮上丧慈,老公的妹妹穿的比我還像新娘析命。我一直安慰自己主卫,他們只是感情好逃默,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著簇搅,像睡著了一般完域。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瘩将,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天吟税,我揣著相機(jī)與錄音,去河邊找鬼姿现。 笑死肠仪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的备典。 我是一名探鬼主播异旧,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼提佣!你這毒婦竟也來了吮蛹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤拌屏,失蹤者是張志新(化名)和其女友劉穎潮针,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倚喂,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡每篷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焦读。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡带兜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吨灭,到底是詐尸還是另有隱情刚照,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布喧兄,位于F島的核電站无畔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吠冤。R本人自食惡果不足惜浑彰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拯辙。 院中可真熱鬧郭变,春花似錦、人聲如沸涯保。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夕春。三九已至未荒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間及志,已是汗流浹背片排。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留速侈,地道東北人率寡。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像倚搬,于是被迫代替她去往敵國和親冶共。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容