2013年4月4日木曜日

グローバル・ローカル名前空間ーーー文字列としての変数名を使って変数を使うーー(なんのこっちゃ)

三次元日誌 さん家に、探してた方法が載っていました。三次元日誌さん、ありがとうございます。

ある変数に、ある値を保存したい。だけど、その変数名を、文字列としてモジュールに渡したい、なんてことが、Blenderを使っていて、起こりました。
Game Property にその変数名を入力しておきます。
Logic Editor で、適当にpythonのModuleを呼び出して使うと、オブジェクトごとに違う変数名を使うことが出来るはず。


なくなっちゃうと困るので、以下、魚拓です:


http://d.hatena.ne.jp/ousttrue/20071115/1195157915

[]メモ:変数名の入った文字列から変数の実体にアクセスするAdd Star

わりとどの言語でもこの手の情報は調べにくいのだが、やっぱりだいぶ手間取った。
__main__とかパッケージ、importの辺りが関連していると思ったんだけど微妙にはずしていてなかなか見つからず。

グローバル名前空間

globals()["HOGE"]

ローカル名前空間

locals()["HOGE"] # 変更禁止らしい。

モジュール名前空間

getattr(Module.Submodule, "HOGE")