[python] __init__.pyと同じ階層にある.pyをまとめてimportする

CEDECで頭のスイッチが入ったのか、いままでやりかたが分からなかったりしたものがどんどんわかるようになって楽しいぜヒャッハー!!

で。

  • module1
    • __init__.py
    • mod.py
    • modB.py

こんな感じに、モジュール下に複数の.pyに分けておいたモノを

__init__.py に

こんな風に書いて、

のような感じで使いたい場合に、pythonの数だけ from XX import * しないで
動的に読み込む方法がないものかと調べてたのですが
ようやくやり方がわかりました。

__init__.py にこれを入れると、同じ階層下にあるptyhonファイルを 自分自身にロードすることができます。

importを文字列で行いたい場合に使用する importlib は、import XXX と同じ効果になります。
それだけだと、自分自身にロードはできないので、dir()でモジュールに含まれる関数やらを取得して、evalでオブジェクトを取得して自分自身のdictにぶっこみます。

これで躊躇なくモジュールを小分けにできる!

追記

若干ミスがあったので修正。
__init__.pyを無視するようにしないとErrorになってたので
moduleNameに__init__が含まれている場合ははじくようにしました。
+ eval() でオブジェクトを取得するのではなく、 __dict__ を使用する方法にしてみました。
たぶんこれでOKかな~

[python] __init__.pyと同じ階層にある.pyをまとめてimportする」への1件のフィードバック

  1. ピンバック: [python] __init__.py 下にあるモジュールをすべてロードする(改 | Reincarnation+

コメントを残す

メールアドレスが公開されることはありません。


*