[问题] @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