作者littrabble (littrabble)
看板Python
标题[问题] @property 真正的运用是啥
时间Mon Jan 6 16:52:00 2025
各位好
最近两个月开始学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://webptt.com/cn.aspx?n=bbs/Python/M.1736153522.A.5AD.html
1F:推 TimmyWendell: 我不是很有经验的大大,但我也想加入讨论XD 01/06 17:06
2F:→ TimmyWendell: 我的想法是依情境使用,以你目前举的例子来说我觉 01/06 17:06
3F:→ TimmyWendell: 得当然没啥用。但是如果当name有限制的时候可能会 01/06 17:06
4F:→ TimmyWendell: 比较容易撰写。例如当name只能设为1-10,那外部人 01/06 17:06
5F:→ TimmyWendell: 输入11的时候就能利用这个性质写个预防name被改成1 01/06 17:06
6F:→ TimmyWendell: -10以外的东西。 01/06 17:06
7F:→ TimmyWendell: 如果有错还请其他大大纠正,谢谢 01/06 17:06
8F:推 ck574b027: 这就是为何常说不用看教学,直接看文件。很多教学都只 01/07 13:24
9F:→ ck574b027: 是介绍有某个feature,跟文件87%像 01/07 13:25
10F:推 ck574b027: 你把setter拿掉,就知道是怎麽保护的了 01/07 13:41
11F:推 funk443: 用 setter 可以检查使用者输入 01/07 13:46
12F:→ leolarrel: 用obj.get_name , obj.set_name 的方式,当然也可以,这 01/07 14:30
13F:→ leolarrel: 就是 pure C的作法.python的@property是一种语法糖,你 01/07 14:33
14F:→ leolarrel: 可以google 语法糖是什麽,作用,优缺点等等 01/07 14:33
15F:→ lycantrope: 包装越多层,效能越差 01/08 09:21