看板 Python 關於我們 聯絡資訊
大家好,小弟大概知道 @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://www.ptt.cc/bbs/Python/M.1580659662.A.F27.html ※ 編輯: Philethan (123.192.0.245 臺灣), 02/03/2020 00:19:17
TuCH: 加了property 你可以用 x.is_overdue 而不用x.is_overdue() 02/03 01:31
TuCH: 可以讓他看起來像個property, method 通常用於動詞 02/03 01:38
TuCH: 例如 x.check_is_overdue() or x.get_is_overdue() 02/03 01:38
TuCH: 例如要求球的體積 可以寫成 x.volume 而不用 x.get_volume() 02/03 01:40
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