如果只想对序列进行迭代,则只需实现
__iter__返回可迭代的方法即可。最简单的方法是使用该
yield语句创建生成器。
class MySequence(object): def __iter__(self): yield 1 yield 2 yield 3for x in MySequence(): print x # prints 1, then 2, then 3
但是,这不会启用
MySequence()[1]。为此,您需要实现该
__getitem__方法,并且可能也应该实现
__len__。
class MySequence(object): def __len__(self): return 3 def __getitem__(self, key): if key == 0: return 1 elif key == 1: return 2 elif key == 2: return 3 else: raise IndexError()s = new MySequence()for i in range(len(s)): print s[i] # prints 1, then 2, then 3for x in s: print x # prints 1, then 2, then 3
注意,我省略了
__iter__。只要在尝试获取超出范围的值时
__getitem__引发
IndexError,Python便可以将其用于迭代。(
__iter__如果我想更清楚,或者想要非标准的迭代行为,我仍然可以包括在内。)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)