すのふら

すのふら

日々の備忘録

importした自作のモジュール内のクラスをリロードする

テストクラス作っていた時に、詰まったのでメモする。

python実装していて、自分で作ったモジュール(クラス)が今実装しているpyファイルとは別ディレクトリで、 別ディレクトリのモジュール内のクラスをimportするってことは往々にしてある。

はまったときは、テストクラス作っていた時は構成ファイルを変更してそれを反映する必要があった。

import時に読み込んでるからリロードせねばと思ったんだけど、うまくできず。
というのも、もう1回importしたら再読み込みされるんじゃね?みたいな考えだったからで、できなくて当然っちゃ当然。

何故かって、処理実行時に何度importしてもロードするのは1プロセス1回。
そりゃあ処理実行時にメモリにロードしてるんだから、当たり前なんだけど気づいてなかった。

方法

ディレクトリ構成

dir1
├dir2
│└ file1.py
└ dir3
 └ file2.py

file1.py

class classLogic:
(class内略)

file2.py(リロードするクラス)

import importlib
from dir1.dir2.file1 import classLogic
# リロード
import dir1.dir2.file1
importlib.reload(dir1.dir2.file1)
from dir1.dir2.file1 import classLogic

一旦、モジュールをリロードしてから、クラスをインポートするのがポイントみたい。