2016-04-25 2 views
0

Я пытаюсь создать код, который использует метод __iter__() как генератор, но я получаю сообщение об ошибке сказав:TypeError: объект не принимает никаких параметров

TypeError: object() takes no parameters.

Кроме того, я не уверен, является ли моя функция доходности должен быть вызван внутри try: или в функции main()

Я довольно новичок в Python и кодировании, поэтому любые предложения и рекомендации будут очень благодарны, чтобы я мог учиться. Благодаря!

class Counter(object): 

    def __init__(self, filename, characters): 
     self._characters = characters 
     self.index = -1 

     self.list = [] 
     f = open(filename, 'r') 
     for word in f.read().split(): 
      n = word.strip('!?.,;:()$%') 
      n_r = n.rstrip() 
      if len(n) == self._characters: 
       self.list.append(n) 

    def __iter(self): 
     return self 

    def next(self): 
     try: 
      self.index += 1 
      yield self.list[self.index] 

      except IndexError: 
       raise StopIteration 
      f.close() 

if __name__ == "__main__": 
    for word in Counter('agency.txt', 11): 
     print "%s' " % word 
+0

Пожалуйста, включите TraceBack ошибки, это помогает. – Roberto

+0

... ваши методы '__init' и т. Д. В конце концов не имеют двух символов подчеркивания. Это '__init__'. Это может привести к ошибке. – Roberto

+1

А также с отступом слишком далеко. – hayavuk

ответ

0

yield Используйте для функции __iter__:

class A(object): 
    def __init__(self, count): 
     self.count = count 

    def __iter__(self): 
     for i in range(self.count): 
      yield i 

for i in A(10): 
    print i 

В вашем случае, может быть, __iter__ выглядит примерно так:

def __iter__(self): 
    for i in self.list: 
     yield i 
0

Вы неправильно набранный декларацию метода __init__, вы набрали:

def __init 

Вместо:

def __init__ 
+0

Ой, я не могу поверить, что пропустил это. Рад, что эта проблема была просто немой опечаткой, однако, теперь ошибка говорит мне: TypeError: объект «Counter» не является итерируемым. Мысли? –

+1

@ D.Lopez То же самое для 'def __iter__' – user312016