2016-03-03 4 views
1

Ошибка:TypeError: генератор() отсутствует 1 необходимые позиционная аргумент: 'JSON'

Traceback (most recent call last): 
    File "...", line ..., in main 
    output_call = output.generator(json_text) 
TypeError: generator() missing 1 required positional argument: 'json' 

Мой код:

class TOTALTIME: 
    def generator(self, json): 
     self._json = json 
     print('{} minutes'.format(int(self._json['route']['time']/60))) 

Мой цикл итерация по списку классов, которые я сделал через словарь.

for output in output_list: 
    output_call = output.generator(json_text) 
    print(output_call) 

Вот функция, которая создает классы:

def list_of_outputs(n_outputs: int) -> 'values': 
    d = {} 
    e = {'STEPS': output_classes.STEPS, 
    'LATLONG': output_classes.LATLONG, 
    'TOTALTIME': output_classes.TOTALTIME, 
    'TOTALDISTANCE': output_classes.TOTALDISTANCE, 
    'ELEVATION': output_classes.ELEVATION } 

    for output in range(n_outputs): 
     add_output = input() 
     if add_output in e.keys(): 
      d.update(e) 
    return d.values() 
+0

'output' представляется * классом *, а не экземпляром класса. –

+0

Является ли 'output_list' состоящим из' TOTALTIME' или 'TOTALTIME()' s? – zondo

+0

My output_list состоит из TOTALTIME и т. Д. Это дало бы мне ошибку, если бы мой словарь походил на {'key': TOTALTIME()} –

ответ

0

Вы вызываете несвязанных функции, не связанный метод. Вам нужно создать экземпляры, чтобы функции в классе связывались с чем-то и предоставляли аргумент self.

Другими словами, ваш output_list содержит TOTALTIME записи, а не TOTALTIME() записей:

>>> class TOTALTIME: 
...  def generator(self, json): 
...   self._json = json 
...   print('{} minutes'.format(int(self._json['route']['time']/60))) 
... 
>>> TOTALTIME.generator({'route': {'time': 360}}) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: generator() missing 1 required positional argument: 'json' 
>>> TOTALTIME().generator({'route': {'time': 360}}) 
6 minutes 

() Обратите внимание на вызов для создания экземпляра.

Смежные вопросы