2011-01-20 28 views
2

こんにちは、誰もが変数を動的に作成/呼び出すより良い方法があります。ブロック内のオブジェクトデータを読み込んで構造化パーサーを作成しようとしています。彼らは発見されます。python3で変数を動的に作成/呼び出しする

これは私の現在の方法の例ですが、これは間違っているようです。

>>> VAR="VAR2" 
>>> class item(): 
...  pass 
... 
>>> newitem=item() 
>>> exec('newitem.'+VAR+'=\''+'hello'+'\'') 
>>> newitem.VAR2 
'hello' 
>>> 

答えて

3

setattrを使用してください。

setattr(object, attribute_name, value) 

ので、例えば、setattr(a, "pancakes", "syrup")はあなたがnewitem.VAR2が "こんにちは" となって行うことsetattr(newitem, VAR, "hello")を使用することができ、そのため、(多かれ少なかれ)a.pancakes = "syrup"

と同じです。

+0

まさに私が喜んで探していたものです。 –

4

私はあなたが動的に変数を作成するための正しい軌道にいると思いますが、なぜあなたがハッシュマップを使用していないのか疑問に思います。なぜかしないでください

newitem = {} 
newitem[VAR] = 'hello' 

"python injection"の調整が必要なので、できるだけevalステートメントから離れてください。すなわち、VARは、無効なコードを引き起こす可能性のある「 '」を含むことができる。可能であれば普通のPythonのコンストラクトを使うほうがはるかに簡単です

+0

ええ、これはおそらく、物事を行うより健康的な方法です、ありがとう。 –

関連する問題