2012-10-26 2 views
7

я создаю метод в классе в модуле Mod1 и назвав его следующим образом:Получение AttributeError: <class> не имеет атрибута <method>

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

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

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

Это throws a Attribute error: blahblah has no attribute named foobar

Не могли бы вы помочь мне с этим? Заранее спасибо

+1

Очевидно, что вы не опубликовали код, который вы используете по какой-либо причине. Хорошо. Но на основании вашего поста нет ничего плохого. Вы уверены, что в вашем реальном коде нет опечатки (возможно, вы случайно написали 'foobar' как' fubar' и т. Д.)? – inspectorG4dget

+0

Нет. Я проверял это, и это было не опечатать наверняка. Извините, не опубликовал фактический код, потому что это программа безопасности. – user1778309

+1

Эта ошибка может возникнуть только в том случае, если 'foobar' не является методом, определенным внутри' blahblah'. Поскольку вы утверждаете, что он определен как таковой, вы не должны видеть эту ошибку. Вы уверены, что 'foobar' определяется внутри' blahblah' в вашем реальном коде? – inspectorG4dget

ответ

18

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

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

+0

Спасибо, это было полезно. где для отпечатка в файле использовалось сочетание вкладок и пробелов. Я прочитал ряд объяснений без какого-либо разрешения, прежде чем найти ответ. – tompark

+1

Для чего это стоит, это также может произойти при использовании% autoreload волшебная команда в ноутбуке jupyter, когда вы модифицируете некоторые методы в своем модульном коде (https://ipython.org/ipython-doc/3/config/extensions/autoreload.html#caveats) – Jacquot

0

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

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