方法に「最善」の方法は、次のようになります。
def __iter__(self):
return iter(self._iterable)
代わりに、それは知っておく価値があるかもしれません:あなたが戻る前に、各項目をいじるようになる
def __iter__(self):
for item in self._iterable:
yield item
それ(例えば、もしあなたが望むなら、yield item * 2
)。
そして@Lattywareはコメントで言及として、(Pythonの3.3に含める予定)PEP380ができるようになります:のような何かをしたくてもよいことが
def __iter__(self):
yield from self._iterable
注:
def __init__(self, iterable):
self.__iter__ = iterable.__iter__
をしかし、は動作しません。:iter(foo)
は、をバイパスして__iter__
メソッドをtype(foo)
に直接呼び出します。例えば、考えてみましょう:
class SurprisingIter(object):
def __init__(self):
self.__iter__ = lambda self: iter("abc")
def __iter__(self):
return iter([1, 2, 3])
あなたはlist(SurprisingIter())
が["a", "b", "c"]
を返すだろうと期待されるが、それは実際に[1, 2, 3]
を返します。
PEP 380(http://www.python.org/dev/peps/pep-0380/)に目を通し、 '' yield from self._iterable''でこれを可能にすることができます(これは3.3に含めることが認められている)。 –