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ā)生遞歸定義的問題了。
這問題感覺問得挺好的,怎么都沒什么人來討論一下呢。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個贊
我猜你可能是想問:在a.b
的時候會調(diào)用b.__get__()
,那么同理,b.__get__
會不會也一樣調(diào)用__get__.__get__
呢?
添加回答
舉報