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

作者: littrabble (littrabble)   2025-01-06 16:52:00
各位好
最近兩個月開始學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 程式碼讀起來,不是更清楚明白嗎?
有沒有很有經驗的大大,能幫我解惑一下
感恩
作者: TimmyWendell (流浪提米)   2025-01-06 17:06:00
我不是很有經驗的大大,但我也想加入討論XD我的想法是依情境使用,以你目前舉的例子來說我覺得當然沒啥用。但是如果當name有限制的時候可能會比較容易撰寫。例如當name只能設為1-10,那外部人輸入11的時候就能利用這個性質寫個預防name被改成1-10以外的東西。如果有錯還請其他大大糾正,謝謝
作者: ck574b027 (荒圍!定厝!賊!妹!)   2025-01-07 13:24:00
這就是為何常說不用看教學,直接看文件。很多教學都只是介紹有某個feature,跟文件87%像你把setter拿掉,就知道是怎麼保護的了
作者: funk443 (CToID)   2025-01-07 13:46:00
用 setter 可以檢查使用者輸入
作者: leolarrel (真.粽子無雙)   2025-01-07 14:30:00
用obj.get_name , obj.set_name 的方式,當然也可以,這就是 pure C的作法.python的@property是一種語法糖,你可以google 語法糖是什麼,作用,優缺點等等
作者: lycantrope (阿寬)   2025-01-08 09:21:00
包裝越多層,效能越差

Links booklink

Contact Us: admin [ a t ] ucptt.com