类定义中必须实现哪些方法才能将其视为序列类型和可迭代类型?如果它们有正式的定义,您是否还可以提供对 PEP 或其他定义它的文档的参考?
2 回答
从词汇表:
可迭代的是:
带有
__iter__()
or__getitem__()
方法的对象。可迭代的示例包括所有序列类型(如 list、str 和 tuple)和一些非序列类型,如 dict 和 file。当可迭代对象作为参数传递给内置函数 iter() 时,它会返回该对象的迭代器。此迭代器适用于遍历一组值。
一个迭代器是:
具有 next() 方法的可迭代对象。迭代器需要有一个
__iter__()
返回迭代器对象本身的方法。迭代器适用于遍历一组值。
一个序列是:
一个 iterable,它支持通过
__getitem__()
特殊方法使用整数索引进行有效的元素访问,并定义了一个 len() 方法,该方法返回序列的长度。一些内置的序列类型是 list、str、tuple 和 unicode。请注意, dict 也支持__getitem__()
and__len__()
,但被认为是映射而不是序列,因为查找使用任意不可变键而不是整数。
collections 模块定义了用于定义序列和可迭代对象的抽象基类。对于可迭代,您必须定义__iter__
,对于序列,您必须定义__getitem__
。请参阅http://docs.python.org/library/collections.html#collections-abstract-base-classes。