python 3 中建立可迭代对象(making object iterable)

Python中的for语句用起来很爽,但是要求 in后面的对象iterable,python中的很多对象支持,如list, tuple, dict。

如果要让自己的类对象也iterable怎么办,究竟如何才算iterable object呢?其实,自已也可以定义特殊的方法来使自定义类支持这种操作。

 第一种方法很简单,就是实现一个特殊函数__getitem__

 

第二种方法,也是实现一个特殊函数__iter__,此函数要求返回一个iterator对象,对于iterator对象的要求就是实现特殊函数 __next__,所以一般的做法就是类同时实现__iter__和__next__,然后在__iter__中返回自己。__next__函数要求依次 返回需要迭代的项目,结束后raise StopIteration,说着很乱,直接上代码,更清晰:

class MyIterator():
    def __init__(self,*items):
        self._items=list(items);
        self._index=-1;

    def __next__(self):
        self._index+=1;
        if self._index <len(self._items):
            return self._items[self._index];
        else:
            raise StopIteration;

    def __iter__(self):
        self._index=-1;
        return self;

 

 

 

第二种方法应该是推荐的做法,不过python的版本不同,要求也不同,在python 3中必须是__next__,否则就报TypeError,在python2.6版本则必须实现next()方法; 为了兼容的话,可以同时定义一个next()方法:

    def next(self):
        return self.__next__();

 

 

 

 

posted @ 2013-01-07 16:56  柒零壹  阅读(1531)  评论(0编辑  收藏  举报