16

モジュール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

手伝ってくれませんか。前もって感謝します

4

8 に答える 8

35

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

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

于 2012-12-26T22:14:12.803 に答える
3

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

于 2016-11-17T23:19:42.427 に答える
3

非常に古い質問ですが、問題が解決したので@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/…)

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

于 2019-01-12T23:28:43.733 に答える
1

両方のファイルのクラスに同じ名前を付けていることに気付くまで、同じ問題に直面していました。

于 2019-06-18T16:32:25.990 に答える
1

古い質問ですが、この問題に直面していて、他のどの答えも役に立たない人にとっては、これは役立つかもしれません。Pickleを使用して、データを含むクラス全体を保存し、このクラスインスタンスを再度ロードしましたが、 initにいくつかのクラスメソッドと属性を追加したため、インタープリターはクラス内に記述された新しい属性を見つけることができませんでした。 (pickleオブジェクト内に「古い」クラスをロードしていました)

于 2020-07-01T13:35:25.163 に答える
1

この問題に遭遇したとき、私はすぐに不均衡なインデント、タブなどをチェックし始めました...すべてが正しいように見えましたが、エラーが引き続き表示されました。私は立ち去り、戻ってきて、もう一度見てみると、DUH ...、タイプミスがあることがわかりました。の代わりに__init__()、と入力しました__inti__()。したがって、最初にコンストラクターのすべての構文を確認してください。

于 2021-03-16T17:31:46.227 に答える
0

私の場合、ClassNameをメソッド呼び出しに追加したところ、次のように機能し始めました。

間違い:

import Clases.Class_filename as LWD
articles=LWD.method_name(parameters)

修正:

import Clases.ClassName as LWD
articles=LWD.ClassName.method_name(parameters)

そして、Clases/Class_filename.pyには次のようなものが含まれています。

class ClassName :
    def method_name(parameters):
     ....
于 2021-09-29T19:56:05.947 に答える
0

VSCodeを使用するJupyterノートブックの場合、インポートされたファイルに変更を加えた後、VSCodeを再起動することが効果的でした。

于 2022-02-04T23:44:55.537 に答える