看板 Python 關於我們 聯絡資訊
def F(func): class C(object): .... .... return C class BeDeco: .... .... BeDeco = F(BeDeco) 問: 在F()內回傳的C 究竟是 class 還是一個object? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.247.20 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1424318595.A.5B7.html
uranusjr: TypeError: F() takes no arguments (1 given) 02/19 12:17
簡寫而已 重點不在那邊... ※ 編輯: NTUHensen (114.39.247.20), 02/19/2015 12:34:19
LiloHuang: 會是一個 type object 02/19 12:59
是的 我也如此想, 我也希望他是個object就好解了. 但事實上是 我們回顧一下__call__的功用時, 他的目的就是在call一個instance加入參數時,會 執行__call__裡面的內容. 參: http://0rz.tw/69tMQ 回過頭來, 如果說F()回傳的是object(也就是instance)的話, 那麼按照這行: BeDeco = F(BeDeco) 的左手邊BeDeco也會是object 如果我們call他的話: result = BeDeco()看等式右手邊, 理論上它會去找C內__call__ 如果沒有, 程式 會顯示錯誤. 但事實上C內沒有__call__ 卻執行相當正常. 這意味著它很可能不 是instance ※ 編輯: NTUHensen (114.39.247.20), 02/19/2015 13:52:31 ※ 編輯: NTUHensen (114.39.247.20), 02/19/2015 13:53:46
uranusjr: 你沒看懂二樓, 它是「type object」, 重點是 type 02/19 14:07
uranusjr: 事實上你執行完之後 BeDeco 就是 inner class C 02/19 14:07
uranusjr: 我想你的問題可能是沒有想通 class 和 class *instance* 02/19 14:09
uranusjr: 都是 object instance (前者是 of type "type") 02/19 14:10
uranusjr: http://stackoverflow.com/questions/100003 看那個有 02/19 14:11
uranusjr: 三千多 upvotes 的答案 02/19 14:11
感謝資訊, 看來回傳的是Class object, 基本上就是class 而不是instance ※ 編輯: NTUHensen (114.39.247.20), 02/19/2015 15:06:18