特に、同じ名前のグローバル変数が存在する場合、Pythonはパッケージ間の呼び出しでグローバル変数を解決しますか?パッケージ間のPythonグローバル変数解決はどのように機能しますか?
たとえば、パッケージP1
にBaseClass
が入っています。対応するBaseClass
を継承するクラスDerived1
およびDerived2
を含む2つのパッケージP2
およびP3
があるとします。また、P2
とP3
には両方ともgvar
という名前の変数が含まれています(たとえば、init .pyファイルで定義されています)。
コンストラクタ内の派生クラスの両方がbaseClass
コンストラクタを呼び出すと、super
が呼び出されます。
BaseClass
コンストラクタにgvar
という参照がある場合、どうなりますか? gvar
のインスタンス化中に確実に使用する方法はありますか?私の実際の生活のケース内のクラスの数十はP1
とP2
である、と私はその定義にパッケージ固有gvar
を追加する(それらすべてを変える避けたい、または他の追加:
は、なぜ私はグローバル変数で悩まていますそれと共通の祖先)。
私は、関数呼び出しのグローバルコンテキストが呼び出し先に渡される可能性があると考えています。したがって、 'P1.BaseClass .__ init__'は' P2.Derived1 .__ init__'で利用可能なグローバルにアクセスできますそれを呼んだ。 – Srv19
@ Srv19:いいえ、それはPythonの仕組みではありません。それは信じられないほど実用的ではありません。なぜなら、必要とするコードをすべてのグローバル変数にインポートする必要があるからです。たとえば、 'argparse'モジュールは' os'、 're'、' sys'、 'textwrap'と' copy'をインポートします。もしグローバルが呼び出し元の名前空間から取られなければならない場合は、あなたのコードで 'argparse'を実行できるようにするためには、それらのモジュールもインポートする必要があります。 –
私は分かりません。なぜ他のものを輸入する必要があるのですか?つまり、グローバル変数は、実行コンテキストに応じてアクセス可能でなければならず、名前をインポートせずに名前で呼び出す必要があります。動的言語なので、Cではなく、コンパイル時に明らかにする必要があります。 – Srv19