看板 Python 關於我們 聯絡資訊
※ 引述《sean72 (.)》之銘言: : class Abc: : def __init__(self): : .... : .... : def run(self): : .... : .... : if __name__ == '__main__' : Abc().run() : 看到上面一段代碼,但是有很大的疑問 : 為什麼是 : Abc().run() : 而不是 : xyz = Abc() : xyz.run() ? : Abc() <--把class當作method執行??? Abc()是呼叫Abc這個class的constructor 作用是回傳一個 Abc的 instance, 這個回傳值本身就是一個object xyz = Abc() # 呼叫Abc的constructor, # 並且把xyz這個name binding到回傳的instance上 xyz.run() # 呼叫xyz所binding的 instance 的 run method Abc().run() # 呼叫Abc的constructor, 並且呼叫其回傳的instance # 的run method 兩種寫法作用是完全相同的 只是前者Abc()所產生的instance會一直存在, 而且你可以用 xyz這個identifier去操作(access)他 後者產生的object在執行完run method之後你就沒有辦法再操作它 而有可能會被garbage collection清除掉 另外推文裡面提到的static method跟這邊有所不同 一般來說呼叫的方式會是 Abc.run() [雖然 Abc().run()也可以] 另外python的classmethod 和staticmethod和C++,java又有點不同 可以參考官方文件 http://docs.python.org/2/library/functions.html#classmethod http://docs.python.org/2/library/functions.html#staticmethod -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.57.113.14 ※ 編輯: mantour 來自: 61.57.113.14 (05/25 12:14) ※ 編輯: mantour 來自: 61.57.113.14 (05/25 12:16)
tails32100:哦哦哦原來如此... 原來是小弟搞錯了Orz 05/25 19:44
sbrhsieh:簡單地說就是要有 expression 的觀念 06/02 20:41