Re: [問題] class

看板Python作者 (朱子)時間12年前 (2013/05/25 12:13), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《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)

05/25 19:44, , 1F
哦哦哦原來如此... 原來是小弟搞錯了Orz
05/25 19:44, 1F

06/02 20:41, , 2F
簡單地說就是要有 expression 的觀念
06/02 20:41, 2F
文章代碼(AID): #1He3ft3F (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
9
12年前, 05/25
完整討論串 (本文為第 2 之 3 篇):
2
11
7年前, 08/14
2
2
1
9
12年前, 05/25
文章代碼(AID): #1He3ft3F (Python)