[問題] @property 真正的運用是啥

看板Python作者 (littrabble)時間5天前 (2025/01/06 16:52), 編輯推噓4(4011)
留言15則, 5人參與, 3天前最新討論串1/1
各位好 最近兩個月開始學python, 有些問題實在是搞不懂, 其中一個是 @property 我看很多教學都說是保護變數, 例如 @property def name(self): return self._name @name.setter def name(self, new_name): self._name = new_name 然後可以使用 instance p, p.name 取值, p.name = 1 設值 我的疑問是, 1. 這根本無法保護變數,為什麼教程還要說這種寫法保護變數 2. 加那個@property @name.setter, 到底有什麼好處? 我如果不使用@property, 而是把方法名稱改成 get_name, 跟 set_name 程式碼讀起來,不是更清楚明白嗎? 有沒有很有經驗的大大,能幫我解惑一下 感恩 -- Sent from nPTT on my iPhone 12 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.112.12 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1736153522.A.5AD.html

01/06 17:06, 5天前 , 1F
我不是很有經驗的大大,但我也想加入討論XD
01/06 17:06, 1F

01/06 17:06, 5天前 , 2F
我的想法是依情境使用,以你目前舉的例子來說我覺
01/06 17:06, 2F

01/06 17:06, 5天前 , 3F
得當然沒啥用。但是如果當name有限制的時候可能會
01/06 17:06, 3F

01/06 17:06, 5天前 , 4F
比較容易撰寫。例如當name只能設為1-10,那外部人
01/06 17:06, 4F

01/06 17:06, 5天前 , 5F
輸入11的時候就能利用這個性質寫個預防name被改成1
01/06 17:06, 5F

01/06 17:06, 5天前 , 6F
-10以外的東西。
01/06 17:06, 6F

01/06 17:06, 5天前 , 7F
如果有錯還請其他大大糾正,謝謝
01/06 17:06, 7F

01/07 13:24, 4天前 , 8F
這就是為何常說不用看教學,直接看文件。很多教學都只
01/07 13:24, 8F

01/07 13:25, 4天前 , 9F
是介紹有某個feature,跟文件87%像
01/07 13:25, 9F

01/07 13:41, 4天前 , 10F
你把setter拿掉,就知道是怎麼保護的了
01/07 13:41, 10F

01/07 13:46, 4天前 , 11F
用 setter 可以檢查使用者輸入
01/07 13:46, 11F

01/07 14:30, 4天前 , 12F
用obj.get_name , obj.set_name 的方式,當然也可以,這
01/07 14:30, 12F

01/07 14:33, 4天前 , 13F
就是 pure C的作法.python的@property是一種語法糖,你
01/07 14:33, 13F

01/07 14:33, 4天前 , 14F
可以google 語法糖是什麼,作用,優缺點等等
01/07 14:33, 14F

01/08 09:21, 3天前 , 15F
包裝越多層,效能越差
01/08 09:21, 15F
文章代碼(AID): #1dUvcoMj (Python)
文章代碼(AID): #1dUvcoMj (Python)