方向構造:
main.py
my_modules/
module1.py
module2.py
module1.py:
class fooBar():
....
class pew_pew_FooBarr()
....
...
Module *からmainにプレフィックスなしですべてのクラスを追加するにはどうすればよいですか(つまり、foo = my_modules.module1.fooBar()ではなくfoo = fooBar()のように使用します)。
明らかな決定は、main.pyに次のようなものを書き込むことです。
from my_modules.module1 import *
from my_modules.module2 import *
from my_modules.module3 import *
...
しかし、新しいmoduleNを作成するときにmain.pyを変更したくありません。そのための解決策はありますか?
このようなクラスをインポートするのは良い考えではないことは知っていますが、それでも興味があります。
UPD:この質問はこれとは異なります Pythonのフォルダーにすべてのモジュールをロードする 私の問題は名前空間なしでモジュールをロードすることです。
my_modules
フォルダーに、__init__.py
ファイルを追加して適切なパッケージにします。そのファイルでは、これらの各モジュールのグローバルを__init__.py
ファイルのグローバルスコープに挿入できます。これにより、モジュールのインポート時にそれらを使用できるようになります(グローバルの名前もに追加した後)。 __all__
変数):
__all__ = []
import pkgutil
import inspect
for loader, name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(name).load_module(name)
for name, value in inspect.getmembers(module):
if name.startswith('__'):
continue
globals()[name] = value
__all__.append(name)
今、する代わりに:
from my_modules.class1 import Stuff
あなたはただすることができます:
from my_modules import Stuff
または、すべてをグローバルスコープにインポートします。これは、あなたがやりたいことのようです。
from my_modules import *
このアプローチの問題は、クラスが相互に上書きすることです。したがって、2つのモジュールがFoo
を提供する場合、最後にインポートされたもののみを使用できます。