Python中的魔法方法、属性和迭代器
1. super函数的优势
在Python里,super函数比直接调用超类的未绑定方法更直观。即便存在多个超类,只要所有超类的构造函数都使用了super,你仅需使用一次super即可。而且,新风格类和super能自动处理一些使用旧风格类时棘手的模糊情况,比如两个超类共享一个超类的情况。
通常,我们不用操心super返回的是什么,就当它返回了你所需的超类。实际上,它返回的是一个super对象,该对象会为你处理方法解析。当你访问其上的属性时,它会遍历所有超类(以及超类的超类等),直到找到该属性,若未找到则会引发AttributeError。
2. 项访问与基本序列和映射协议
除了 __init__ 这个重要的特殊方法外,还有很多其他魔法方法能实现很酷的功能。其中一组魔法方法可用于创建行为类似序列或映射的对象。
序列和映射本质上是项的集合。若对象是不可变的,实现其基本行为(协议)需要两个魔法方法;若是可变的,则需要四个,具体如下:
| 方法 | 描述 |
| ---- | ---- |
| __len__(self) | 返回集合中项的数量。对于序列,是元素数量;对于映射,是键值对数量。若返回零且未实现 __nonzero__ ,对象在布尔上下文中被视为假。 |
| __getitem__(self, key) | 返回与给定键对应的值。对于序列,键应为0到n - 1的整数(也可以是负数);对于映射,可以是任意类型的键。 |
|
超级会员免费看
订阅专栏 解锁全文
2367

被折叠的 条评论
为什么被折叠?



