web-dev-qa-db-ja.com

AttributeErrorの取得:<class>には属性<method>がありません

モジュールmod1のクラスにメソッドを作成し、次のように呼び出します。

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

そしてそれを次のように呼びます:

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

Attribute error: blahblah has no attribute named foobarをスローします

手伝っていただけませんか?前もって感謝します

13
user1778309

説明するエラーの種類は、インデントの不一致が原因である可能性があります。メソッドがクラスの一番下にある場合は、クラス内で少し上に移動すると、問題が明らかになります。

pythonインタープリターが一致しないインデントに遭遇した場合(スペースでインデントされたファイルの下部にあるタブの使用を開始したなど))、インタープリターは常にエラーをスローするとは限らず、単に無視できますファイルの残りの部分です。元の作成者がさまざまな空白文字(たまたまGeanyタブと一致する)を使用した古いコードを更新しているときに、この問題に遭遇しました。認める。 :)

27
3vi1

非常に古い質問ですが、@ Jacquotのコメントを引用します。問題が解決したためです(ipythonで%autoreloadを使用していました)。

For what it's 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/…)

特に、クラスをインポートしていたセルを再実行する問題を解決しました。

1
jcsun

同じ問題がありましたが、クラスファイルを移動したときに発生しましたが、.pyoファイルを古いフォルダーに残し、pythonがその.pyoファイルを読み取る代わりに移動した.pyファイルを読み取る。

1
maxgalbu

両方のファイルで同じ名前のクラスに名前を付けたことに気づくまで、同じ問題に直面しました-かなりばかげています!

0
javaNoob2792