シーケンス型および反復可能型と見なすには、クラス定義にどのメソッドを実装する必要がありますか?また、それらの正式な定義がある場合は、PEPまたはそれが定義されている別のドキュメントへの参照を提供することもできますか?
2 に答える
用語集から:
反復可能は次のとおりです。
__iter__()
or__getitem__()
メソッドを持つオブジェクト。iterableの例には、すべてのシーケンスタイプ(list、str、tupleなど)と、dictやfileなどの非シーケンスタイプが含まれます。反復可能オブジェクトが引数として組み込み関数iter()に渡されると、オブジェクトのイテレーターを返します。このイテレータは、値のセットを1回渡すのに適しています。
イテレータは次のとおりです。
next()メソッドを持つiterable。
__iter__()
イテレータには、イテレータオブジェクト自体を返すメソッドが必要です。イテレータは、値のセットを1回パスするのに適しています。
シーケンスは次のとおりです。
特別なメソッドを介して整数インデックスを使用して効率的な要素アクセスをサポートし
__getitem__()
、シーケンスの長さを返すlen()メソッドを定義するiterable。組み込みのシーケンスタイプには、list、str、tuple、およびunicodeがあります。dictも__getitem__()
and__len__()
をサポートしますが、ルックアップは整数ではなく任意の不変キーを使用するため、シーケンスではなくマッピングと見なされることに注意してください。
コレクションモジュールは、シーケンスとイテラブルを定義するための抽象基本クラスを定義します。反復可能の場合はを定義する必要があり__iter__
、シーケンスの場合はを定義する必要があります__getitem__
。http://docs.python.org/library/collections.html#collections-abstract-base-classesを参照してください。