Получение атрибутаError: <класs> не имеет атрибута <method>

Я создаю метод в классе в модуле mod1 и вызываю его следующим образом:

class blahblah:
   def foobar(self, bvar, **dvar)
       ////
       return dvar

И назвав его как:

obj1 = mod1.blahblah()
dvar1 = obj1.foobar(True, **somedictionary)

Он выдает a Attribute error: blahblah has no attribute named foobar

Не могли бы вы помочь мне? Спасибо заранее

Ответ 1

Тип ошибки, которую вы описываете, может быть вызван просто несогласованным отступом. Если метод находится в самом низу вашего класса, немного переместите его в классе, и проблема станет очевидной.

Когда интерпретаторы python работают с несогласованными отступами (например, вы начали использовать вкладки внизу файла с отступом с пробелами), интерпретатор не всегда будет вызывать ошибку; он может просто игнорировать остальную часть файла. Я столкнулся с этим только сегодня, обновляя старый код, в котором оригинальный автор использовал разные символы пробелов (что соответствовало моим вкладкам Geany), и это бросило меня за цикл намного дольше, чем я хотел бы признать.:)

Ответ 2

У меня была такая же проблема, и для меня это случилось, когда я переместил файл класса, но я оставил файл .pyo в старой папке, а python все еще читал этот .pyo файл, а не читал перенесенный файл .py.

Ответ 3

Очень старый вопрос, но я цитирую комментарий @Jacquot, так как он решил мою проблему (я использовал% autoreload в ipython).

For what it worth, it can also happen when using the %autoreload magic command in jupyter notebook, when you modify some methods in your module code (ipython.org/ipython-doc/3/config/extensions/…)

В частности, я решил проблему с повторным запуском ячейки, которая импортировала мой класс.

Ответ 4

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