スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Python Tips: from import で reload する

こんばんわ、Toryです。
案の定あまり更新出来てないわけですが…。

今回はMayaなPython開発でよく使うreload()関数について1つ。

Maya用のPythonスクリプトを書いていると、モジュールの再読み込みをしたくなることってよくありますよね。
普通のPythonスクリプトなら、インタプリタごと再起動してしまえばいいわけなんですが、Mayaの場合本体ごと再起動しないといけないのでとても面倒です。

そういうわけでreload関数を使って再読み込みすると便利なのですが、このreload関数なんとfrom importで読み込んだモジュールを再読み込みすることができません。えぇぇ…

(form importを使うべきかどうかは別として)これは非常に不便です。

例えば、
from poly_helper import PolyHelper のようにした場合、
reload(poly_helper)としても、reload(PolyHelper)としてもエラーが出てしまいます。

これは、from文では、モジュールオブジェクト自体への参照が作成されず、reload()関数に渡すオブジェクトが未定義になってしまっているためですが、こういう場合、以下の様な書き方をすることができます。

import poly_helper
reload(poly_helper)
from poly_helper import PolyHelper

なぜこのような書き方ができるのか。

import
モジュールを読み込み、モジュールオブジェクトへの参照を作成する

from import
モジュールを読み込み、モジュール内の特定の要素への参照を作成する
(モジュールオブジェクト自体への参照は作成されない)

reload関数
引数にモジュールオブジェクトが必要

モジュールオブジェクトの実体
import と from import で作成されるモジュールオブジェクトはメモリ上では単一

というわけで、import文でモジュールオブジェクトへの参照さえ作ってしまえば、その参照でreloadすることができるわけです。

あまり使いドコロのないTipsかもしれませんが、何処かで誰かの役に立てばいいと思い書きました。
from自体、使わない方がいいんだろうか…。
関連記事
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。