作者dinohsu1019 (杰生方的铁粉)
看板Python
标题Re: [问题] 学习Descriptor, Design Patterns
时间Thu May 23 20:42:01 2024
※ 引述《dinohsu1019 (杰生方的铁粉)》之铭言:
: 学习Python一年基本的会了,最近想加强物件导向编程(object-oriented programming)
: 我学得有点辛苦:Descriptor的部分我已经看了5位直播老师,还是觉得没有掌握:为什
: 麽要用另一个class来实作getter, setter呢?
: 另外是「四人帮」的23个设计模式(design patterns),还有很长的路要走
: 至於 metaclass 就更难了,看来应该用不上,先就放着了。
: 不知大家学这些是否一次就能掌握?Python有这麽难吗?感谢先
2024-05-23 更新
我现在对於 descriptor protocol 的理解好一点了:
1. 是为解决类别属性存取的问题,例如 validation, caching, logging 等。
2. 如果使用单一类别:(1)使用 __setattr__, getattr__ 或是(2)使用 @property,
@attrbute.setter 等,会有继承上的麻烦,多属性也有点麻类。
3. descriptor protocol 的解法是增加一种叫做 descriptor 的类别,使用
__set__, __get__, __del__ 等方法,这样继承和多属性的写法比较简洁。
4. 由於 descriptor 最好使用WeakKeyDictionary 来简化圾垃回收的问题 (garbage
collection)
先前所以会觉得很难是因为缺乏一些前知识:garbage collection, weakref, 多
种神奇方法 (magic methods)、以及要解决的问题等,造成「内在认知负荷」(
intrinsic cognaitive load)过大。
这是范例 notebook:
https://tinyurl.com/28ocufyu
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.68.238.10 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1716468124.A.75C.html
※ 编辑: dinohsu1019 (219.68.238.10 台湾), 05/23/2024 20:45:09
※ 编辑: dinohsu1019 (219.68.238.10 台湾), 05/23/2024 20:49:41
1F:→ lycantrope: 能不用就不用,很慢 05/23 21:55
2F:→ timTan: 通常是 framework 作者会用到 05/31 22:13