a.py:ローカルネームスペースの一部をインポート先に与える方法はありますか?
import b
import c
...
import z
class Foo(object):
...
thosesモジュールB-Zの各々は、クラスFOOを使用する必要があります。
インポートのように、すべてのモジュールA〜Zの間接的なアクセス(オブジェクト経由など)を可能にしながら、各モジュールB〜ZがAの名前空間(例:foo)にアクセスできるようにします。
a.py:ローカルネームスペースの一部をインポート先に与える方法はありますか?
import b
import c
...
import z
class Foo(object):
...
thosesモジュールB-Zの各々は、クラスFOOを使用する必要があります。
インポートのように、すべてのモジュールA〜Zの間接的なアクセス(オブジェクト経由など)を可能にしながら、各モジュールB〜ZがAの名前空間(例:foo)にアクセスできるようにします。
私はまだあなたが求めても、やろうとしたりしているかわかりませんが、これは私の最高の推測です:
通常、ちょうど古典的な輸入品を使用しています。
のIFモジュールが大きすぎる成長している、またはあなたが非常に良いものを分割する理由が、同じ名前空間を共有したいという願望を持っている場合は、ダミーの名前空間に値を「揚げる」ことができます。たとえば、私がwidget.Foo
とwidget.Bar
を持っていて別のファイルに入れたいのですが、それぞれのファイルにFoo
とBar
と入力できるようにしたいのですが、通常はfrom widget import Foo
とfrom widget import Bar
です。これらのファイル(foo.py、bar.py、baz.py、...、zeta.py)がたくさんある場合は、扱いにくいかもしれません。したがって、widget/__init__.py
に一度だけインポートし、各フォルダ内でとfrom foo import *, from bar import *, ...
に移動し、各モジュールで1回だけfrom widget import *
に行くことで、状況を改善できます。そして、完了しました!...まあ...ほぼ...
これは、あなたが非常に注意する必要がある循環インポートのシナリオにあなたをもたらします:Circular (or cyclic) imports in PythonBar
foo.py
の関数では、すぐに値を使用しないため、すべてが問題ありません。しかし、foo.py
でx = Bar
を実行すると、値がまだ定義されていない可能性があります。
sidenote:__import__
機能を使用してプログラムでインポートすることができます。これをos.walk
と組み合わせると、ウィジェットフォルダ内の各ファイルにfrom ... import *
と入力する必要がなくなります。これは、バグを避けるために不可欠で必要なステップです。
私はあなたが何を求めているのか理解できません。あなたは説明するためにいくつかのコードを投稿できますか? –
できるだけ明確に投稿を編集した後、私はまだ理解できません。あなたは質問を編集し、あなたが本当にやろうとしていることを言うべきです。 – ninjagecko