目录
通过实现特殊方法,自定义数据类型可以表现得跟内置类型一样,从而让我们写出更具表达力的代码——
或者说,更具
Python
风格的代码。
1.1 __getitem__
和 __len__
object.
__getitem__
(self, key)
调用此方法以实现 self[key]
的求值。对于序列类型,接受的键应为整数和切片对象。请注意负数索引(如果类想要模拟序列类型)的特殊解读是取决于 __getitem__()
方法。
如果 key 的类型不正确则会引发 TypeError
异常;如果为序列索引集范围以外的值(在进行任何负数索引的特殊解读之后)则应引发 IndexError
异常。对于映射类型,如果 key 找不到(不在容器中)则应引发 KeyError
异常。
object.
__len__
(self)
调用此方法以实现内置函数 len()
。应该返回对象的长度,以一个 >=
0 的整数表示。此外,如果一个对象未定义 __bool__()
方法而其 __len__()
方法返回值为零,则在布尔运算中会被视为假值。
CPython implementation detail: 在 CPython 中,要求长