ホームページ >バックエンド開発 >Python チュートリアル >「AttributeError: \'module\' object has noattribute [duplicate]」が発生するのはなぜですか?
「属性エラー: 'モジュール' オブジェクトに属性 [重複] がありません」: 総合ガイド
このエラーは、Python モジュールが存在しない属性にアクセスします。あなたの特定のケースでは、エラーは「AttributeError: 'module' object has noattribute 'hi'」です。このエラーは、インポートしているモジュール (b.py) に「hi」という名前の関数がないことを示しています。
相互トップレベル インポートについて
この問題は、a.py と b.py の間で相互にトップレベルのインポートがあるために発生します。これは、循環インポートやその他の問題を引き起こす可能性があるため、通常は推奨されません。
問題の解決
このエラーを修正し、相互インポートを回避するには、次のようにインポートできます。関数内のモジュールは次のとおりです:
b.py の場合:
<code class="python">def cause_a_to_do_something(): import a a.do_something()</code>
a.py の場合:
<code class="python">import b def hello(): print("hello") print("a.py") print(hello()) b.cause_a_to_do_something()</code>
このようにして、a.py はエラーを発生させることなく安全に b.py をインポートし、その関数を呼び出すことができます。
インポートの最適化
非効率的に見えるかもしれませんが、関数内でインポートしますが、実際にはそうではありません。 Python はインポートされたモジュールをキャッシュするため、インポート操作は関数を初めて呼び出すときにのみ実行されます。後続のインポートは迅速な操作です。
以上が「AttributeError: \'module\' object has noattribute [duplicate]」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。