作者Philethan (Ethan)
看板Python
标题[问题] Django 的 @property
时间Mon Feb 3 00:07:39 2020
大家好,小弟大概知道 @property 有助於日後修改 class 的参数条件限制,
例如几个月前我定义了球类(class Ball),接着我建立了数十颗球,现在才
想起我忘记强调它的半径必须大於零,所以倘若还要制定一个 set_radius()
来限制半径,那麽我得回去将所有 ball.radius = 10 之类的程式码都修改为
ball.set_radius(10),这会很麻烦,所以就有了 @property 这种东西出来。
不过我不知道怎麽将上述我对 @property 的理解,应用在底下 Django 中QQ
我正在读 "
Django Tutorial Part 8: User authentication and permissions"
https://reurl.cc/xD5g8E
其中有一段程式码为(
https://i.imgur.com/HMcdolW.png):
@property
def is_overdue(self):
if self.due_back and date.today() > self.due_back:
return True
return False
就我理解,这段程式码的用意在於检查「书籍借阅是否已过期」,所以总觉得
如果我拿掉 @property,好像也有相同效果?(测试结果:拿掉 @property 後,
确实看不出有什麽异样)。另外,这里似乎也没有修改资料库中的任何资料,
所以我就也无法用上述的「球半径的例子」来理解这里的 @property 用途 QQ
另外,我有在 StackOverflow 查到:
"What the @property decorator does, is declare that
it can be accessed like it's a regular property."
https://stackoverflow.com/questions/58558989/what-does-djangos-property-do
但我还是不太懂 QQ
还请各位大大协助,谢谢您们!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.192.0.245 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1580659662.A.F27.html
※ 编辑: Philethan (123.192.0.245 台湾), 02/03/2020 00:19:17
1F:推 TuCH: 加了property 你可以用 x.is_overdue 而不用x.is_overdue() 02/03 01:31
2F:推 TuCH: 可以让他看起来像个property, method 通常用於动词 02/03 01:38
3F:→ TuCH: 例如 x.check_is_overdue() or x.get_is_overdue() 02/03 01:38
4F:→ TuCH: 例如要求球的体积 可以写成 x.volume 而不用 x.get_volume() 02/03 01:40
5F:→ TuCH: 或着x.volume() 02/03 01:40
哦哦!感谢你,我懂罗。确实有在 template 看到这种用法:
<
li class="{% if bookinst.is_overdue %}text-danger{% endif %}">
<
a href="{% url 'book-detail' bookinst.book.pk %}">
{{ bookinst.book.title }}<
/a>
({{ bookinst.due_back }})
<
/li>
谢谢你
※ 编辑: Philethan (123.192.0.245 台湾), 02/03/2020 09:59:08