インポートされるモジュールを変更する

メモ。importしたときにロードされるモジュールを変更する。

import_main.py

#import sys; sys.modules['mod1'] = __import__('mod1a') # (1)
import mod1
print "mod1 - loaded"
import mod2
print "mod2 - loaded"

mod1.py

import mod2
print "This is mod1."

mod2.py

print "This is mod2."

mod3.py

print "This is mod3."

mod1a.py

import mod3
print "This is mod1a."

まずはそのまま実行。

>python import_main.py
This is mod2.
This is mod1.
mod1 - loaded
mod2 - loaded

mod1の中でmod2がロードされるので、2回目のロードではprintが実行されない。
次に(1)の行のコメントをはずして実行。

>python import_main.py
This is mod3.
This is mod1a.
mod1 - loaded
This is mod2.
mod2 - loaded

mod1をロードしたつもりですが、printが実行されません。へー。