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

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

Python中function的__get__方法的疑問

Python中function的__get__方法的疑問

富國滬深 2019-02-20 05:37:36
看descriptor的時候看到了,普通函數(shù)其實(shí)也是一個類的實(shí)例,function類,只是因?yàn)槎x有特殊的__get__方法,所以才有各種function, bound method之類的表現(xiàn)。 那么既然def xxx的時候會產(chǎn)生一個function類的實(shí)例,那么在這個實(shí)例里def __get__()的時候不是又會產(chǎn)生一個function的實(shí)例?這不是發(fā)生遞歸定義了嗎?
查看完整描述

2 回答

?
撒科打諢

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

在函數(shù)體(def top():)中再定義函數(shù) def xxx 會不會產(chǎn)生一個 function 實(shí)例?答案是會。從翻譯成opcode的結(jié)果來看,函數(shù)體中會執(zhí)行 MAKE_FUNCITON 指令,這個指定是會申請一個內(nèi)存空間,并設(shè)置其運(yùn)行的堆棧信息和變量空間等,也就是相當(dāng)于 new 了一個實(shí)例。每次調(diào)用 top() 函數(shù),因?yàn)樵摵瘮?shù)里定義了 def xxx ,所以依然會執(zhí)行 MAKE_FUNCITON 指令,也就是說,每次調(diào)用了 top ,里面的 xxx = new Funciton(),都會是不同的函數(shù)對象。

題主中提到的 __get__() 是特殊的內(nèi)置方法,如果你 print(type(top.__get__)) 就能看到它并不是函數(shù)的實(shí)例,而是 <class 'method-wrapper'> 。想在函數(shù)內(nèi)定義 __get__() 方法來覆蓋應(yīng)該是行不通的,也就不存在發(fā)生遞歸定義的問題了。

這問題感覺問得挺好的,怎么都沒什么人來討論一下呢。

查看完整回答
反對 回復(fù) 2019-03-01
?
達(dá)令說

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

我猜你可能是想問:在a.b的時候會調(diào)用b.__get__(),那么同理,b.__get__會不會也一樣調(diào)用__get__.__get__呢?

查看完整回答
反對 回復(fù) 2019-03-01
  • 2 回答
  • 0 關(guān)注
  • 589 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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