[問題] 物件導向回傳問題

看板Python作者 (搖滾人)時間10年前 (2015/02/19 12:03), 10年前編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/1
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

02/19 12:17, , 1F
TypeError: F() takes no arguments (1 given)
02/19 12:17, 1F
簡寫而已 重點不在那邊... ※ 編輯: NTUHensen (114.39.247.20), 02/19/2015 12:34:19

02/19 12:59, , 2F
會是一個 type object
02/19 12:59, 2F
是的 我也如此想, 我也希望他是個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

02/19 14:07, , 3F
你沒看懂二樓, 它是「type object」, 重點是 type
02/19 14:07, 3F

02/19 14:07, , 4F
事實上你執行完之後 BeDeco 就是 inner class C
02/19 14:07, 4F

02/19 14:09, , 5F
我想你的問題可能是沒有想通 class 和 class *instance*
02/19 14:09, 5F

02/19 14:10, , 6F
都是 object instance (前者是 of type "type")
02/19 14:10, 6F

02/19 14:11, , 7F
02/19 14:11, 7F

02/19 14:11, , 8F
三千多 upvotes 的答案
02/19 14:11, 8F
感謝資訊, 看來回傳的是Class object, 基本上就是class 而不是instance ※ 編輯: NTUHensen (114.39.247.20), 02/19/2015 15:06:18
文章代碼(AID): #1KvM23Mt (Python)
文章代碼(AID): #1KvM23Mt (Python)