[問題] method宣告self為參數到底有啥用?

看板Python作者 (Lev)時間15年前 (2010/09/06 10:59), 編輯推噓3(3014)
留言17則, 7人參與, 最新討論串1/1
為何method一定要將self寫進宣告中呢? 實際在呼叫的時候不是也用不到嗎? 搞不太懂這個設計,總覺得很多餘...... 希望有人能為我解惑, 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.64.139.91

09/06 11:04, , 1F
你是在class看到的吧,有點等同於this
09/06 11:04, 1F

09/06 12:55, , 2F
你寫的時候雖然沒有, 但底層還是有傳該instance給那functi
09/06 12:55, 2F

09/06 12:55, , 3F
當參數, 算是一種識別instance的方法..
09/06 12:55, 3F

09/06 17:10, , 4F
我只知道可以取別的名字,不一定要叫self
09/06 17:10, 4F

09/07 03:03, , 5F
可是為何要寫出來呢? C++中也不用特別把this當參數啊
09/07 03:03, 5F

09/07 04:22, , 6F
歷史因素
09/07 04:22, 6F

09/07 08:48, , 7F
版上前輩說過了:self明確寫出是Python的風格
09/07 08:48, 7F

09/07 08:49, , 8F
「Explicit is better than implicit.」
09/07 08:49, 8F

09/07 08:52, , 9F
不是歷史因素;it's explicity,照慣例也一定要取名作 self
09/07 08:52, 9F

09/07 08:52, , 10F
classmethod 的第一個引數也必須名為 cls
09/07 08:52, 10F

09/07 08:53, , 11F
staticmethod 則不可以有 self/cls
09/07 08:53, 11F

09/07 18:17, , 12F
其實explicit self的問題很多人在討論 希望取消的人也想了
09/07 18:17, 12F

09/07 18:17, , 13F
許多解決辦法 但越完美的解決辦法需要越複雜的更動...
09/07 18:17, 13F

09/07 18:18, , 14F
但並不是"必需如此" 所以我基本認為算是歷史因素
09/07 18:18, 14F

09/07 20:06, , 15F
self/cls 的使用確實是有歷史成分在的
09/07 20:06, 15F

09/07 20:07, , 16F
但若僅僅只用歷史因素四字說明則是過於簡化了
09/07 20:07, 16F

09/07 20:07, , 17F
文章代碼(AID): #1CX5ZuF5 (Python)
文章代碼(AID): #1CX5ZuF5 (Python)