Pythonモジュールを作成するときに、モジュールがインポートされているのかリロードされているのかを確認する方法はありますか?
クラスを作成できることはわかっています__init__()。最初のインポートでのみ呼び出されますが、クラスを作成する予定はありませんでした。ただし、インポートされているのかリロードされているのかを簡単に判断する方法がない場合は、そうします。
Pythonモジュールを作成するときに、モジュールがインポートされているのかリロードされているのかを確認する方法はありますか?
クラスを作成できることはわかっています__init__()。最初のインポートでのみ呼び出されますが、クラスを作成する予定はありませんでした。ただし、インポートされているのかリロードされているのかを簡単に判断する方法がない場合は、そうします。
のドキュメントreload()には、実際には、少なくとも通常の場合には、目的のために機能すると思われるコード スニペットが記載されています。次のようにします。
try:
reloading
except NameError:
reloading = False # means the module is being imported
else:
reloading = True # means the module is being reloaded
これが実際に行うことは、モジュールが「クリーンに」(たとえば初めて) インポートされているか、同じモジュールの以前のインスタンスを上書きしているかを検出することです。通常の場合、「クリーンな」インポートはimportステートメントに対応し、「ダーティ」なインポートは に対応します。実際にモジュールをインポートするのは、最初に実行されたとき (各モジュールに対して) 1 回だけだからですreload()。import
何らかの方法でステートメントの後続の実行を強制importして何か重要なことを実行させた場合、または を使用してモジュールを初めてインポートすることができた場合reload()、またはインポートメカニズムをいじった場合 (impモジュールなどを介して)、すべての賭けはオフです。言い換えれば、これがあらゆる状況で常に機能するとは考えないでください。
PS あなたがこの質問をしているという事実は、あなたがおそらくすべきでないことをしているのだろうかと思いますが、私は尋ねません。
>>> import os
>>> os.foo = 5
>>> os.foo
5
>>> import os
>>> os.foo
5