【发布时间】:2012-10-07 01:42:29
【问题描述】:
在类定义中必须实现哪些方法才能将其视为序列类型和可迭代类型?如果它们有正式的定义,您是否还可以提供对 PEP 或定义它的其他文档的参考?
【问题讨论】:
标签: python collections
在类定义中必须实现哪些方法才能将其视为序列类型和可迭代类型?如果它们有正式的定义,您是否还可以提供对 PEP 或定义它的其他文档的参考?
【问题讨论】:
标签: python collections
来自the glossary:
一个可迭代对象是:
具有
__iter__()或__getitem__()方法的对象。示例 可迭代对象包括所有序列类型(例如 list、str 和 tuple) 以及一些非序列类型,如 dict 和 file。当一个可迭代的 对象作为参数传递给内置函数 iter(),它 返回对象的迭代器。这个迭代器适用于一次通过 在一组值上。
一个迭代器是:
具有 next() 方法的可迭代对象。迭代器必须有 一个返回迭代器对象本身的
__iter__()方法。一个 迭代器适用于遍历一组值。
一个序列是:
一个支持使用整数进行有效元素访问的可迭代对象 通过
__getitem__()特殊方法索引并定义一个 len() 返回序列长度的方法。一些内置序列 类型是 list、str、tuple 和 unicode。注意 dict 也支持__getitem__()和__len__(),但被认为是映射而不是 比序列,因为查找使用任意不可变键 而不是整数。
【讨论】:
集合模块定义了用于定义序列和可迭代对象的抽象基类。对于可迭代,您必须定义__iter__,对于序列,您必须定义__getitem__。见http://docs.python.org/library/collections.html#collections-abstract-base-classes。
【讨论】: