__init__() принимает 1 позиционный аргумент, но было задано 2

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

Итак, в foo/foo.py у меня есть класс и его конструктор, определенные следующим образом:

class Foo:
    def __init__(self, bars):
        self.bars = bars

В baz.py у меня есть следующее:

from foo import foo
test_bars = [ a list of things ]
f = foo.Foo(test_bars)

что приводит меня к

__init__() takes 1 positional argument but 2 were given

Я также попытался превратить конструктор в kwargs, как показано ниже.

class Foo:
    def __init__(self, bars=None):
        self.bars = bars

а потом звоню

from foo import foo
test_bars = [ a list of things ]
f = foo.Foo(bars=test_bars)

и это дает ошибку о неопознанном kwarg.

Другие классы, включенные в foo/foo.py, похоже, работают нормально.

Что я не вижу?


person xtrom0rt    schedule 18.03.2017    source источник
comment
Не похоже, что вы импортируете файл, о котором думаете. Попробуйте from foo import foo; print foo.__file__ точно определить, откуда он исходит.   -  person jasonharper    schedule 18.03.2017
comment
На самом деле, похоже, что файл правильный: ‹project_folder›\foo\foo.py И выдает другое сообщение об ошибке, если я касаюсь аргументов конструктора. Это должно быть что-то другое.   -  person xtrom0rt    schedule 18.03.2017
comment
Возможно, у вас есть два class Foo в файле? Это не ошибка, и любые изменения, которые вы сделаете в первом, не будут иметь никакого эффекта.   -  person jasonharper    schedule 18.03.2017
comment
О да, вы угадали. Извините, увидел ваш комментарий после того, как опубликовал ответ.   -  person xtrom0rt    schedule 18.03.2017


Ответы (2)


Да, я знал, что это должно быть что-то глупое. У меня была более старая реализация класса с тем же именем, которое было определено ниже всего. Я увидел это только тогда, когда прокрутил достаточно вниз.

person xtrom0rt    schedule 18.03.2017

1) импорт неправильного класса foo его Foo, т.е. из foo import Foo.

2) foo.Foo должно быть только Foo

from foo import Foo
test_bars = [ 1, 2, 3 ]
f = Foo(test_bars)
person Chanchal Roshan    schedule 18.03.2017