※ 引述《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