Python defined peek iterator, get the error "'list' object is not callable" -
i try defined peek iterator class manually, peek function return iterator pointer value, not move on. generator class has next() , has_next() function, , peekiterator class add peek() function, when call peek function, error:
traceback (most recent call last): file "iterater.py", line 63, in <module> test.peek() typeerror: 'list' object not callable could please check what's issue here ? thank !
class generator: def __init__(self, n): self.n = n self.i = 0 def __iter__(self): return self def next(self): if self.has_next(): = self.i self.i += 1 return else: print "there no next value." return none #raise stopiteration() def has_next(self): if self.i >= self.n: return false else: return true class peekiterator: def __init__(self, generator): self.peek = [] self.generator = generator def __iter__(self): return self def peek(self): if self.peek == []: if self.has_next(): cur = self.generator.next() self.peek.append(cur) print "cur: ", cur return cur else: return self.peek[-1] def has_next(self): if not self.generator.has_next() , not self.peek: return false else: return true def get_next(self): if not self.peek: if self.has_next(): return self.generator.next() else: ret = self.peek[-1] self.peek.pop() return ret gen = generator(5) test = peekiterator(gen) print test.has_next() print test.get_next() print test.get_next() test.peek() ~
class peekiterator: def __init__(self, generator): self.peek = [] #... def peek(self): you have 2 peeks here - 1 method, , 1 list. 1 overwrite other. when test.peek(), python thinks you're referring list , not method.
consider renaming 1 of these else. ex. change list self.items.
Comments
Post a Comment