3

インポートされるモジュール内のインポートするモジュールの名前をどのように判別しますか。私には部分的な解決策がありますが、完全な解決策ではありません。

コードは次のとおりです。A.py

import B

if __name__ == '__main__':
    print 'This a test'

B.py

import sys
import C
if sys.argv[0] == 'A':
    doSomething()

この時点で、モジュールB内で、インポートを呼び出したメインの名前(この場合はA)がわかっているので、すべて設定されています。ただし、B内では、Cのインポートが要求され、Cでは次のようになります。 BがCを輸入したかどうか知りたいですか?これはどのように行われますか?

4

3 に答える 3

2

sys.argv[0]実行時のモジュール名ではありませんimport。実行ファイル名です。

一方、Python モジュール内__name__では、a) インポートによって実行された場合はモジュール名、b)"__main__"スクリプトとして実行された場合は、に等しくなります。

モジュールは誰が実行したかを「認識」していませんimport(「親」属性などはありません)。さまざまな関数で動作を定義し、さまざまなモジュールから呼び出します。

于 2012-12-10T14:52:04.603 に答える
0

インタプリタスタックまたはトレースバックを試すことができます。どちらもスタックの関数呼び出しを提供するため、これはまさに必要なソリューション(モジュール)ではありません。

于 2012-12-10T14:53:38.473 に答える
0

しかし、これが実際にあなたがやりたいことだとは思えません。特に、Bのトップレベルのコードは、モジュールがいくつの場所からインポートされても、1回だけ実行されることに注意してください。

たとえば、モジュールBが到達する前にモジュールCをインポートするモジュールDもインポートする場合、BからインポートされるときのCのコードは実行されません。

Cをインポートした後にBが一度実行できる関数をCで単純に定義する方がおそらく良い考えだと思います。

于 2012-12-10T14:50:42.713 に答える