2012-05-03 9 views
0

私はMayaでPython APIを使用しています。いくつかのツールでは、さまざまなオブジェクトにコードを反復処理する必要があります。これには、名前をつけたオブジェクト参照をオブジェクト作成者の出力にアタッチし、関数が呼び出された直後に関数を実行する必要があります。リストから動的に変数名を作成する

よりもむしろ(仮想例)を実行している:

className.myObject1 = mayaClass.create(myObject1) 
func1() 
func2() 

className.myObject2 = mayaClass.create(myObject2) 
func1() 
func2() 

など。

が、私はこれを行うと言うことができる方法があります:

myObjs = ['myObject1','myObject2','myObject3'] 
for obj in myObjs: 
    className.obj = mayaClass.create(obj) 
    func1() 
    func2() 

それは確かに多くを救いますスクリプトのサイズを縮小し、より簡単に保守可能にすることができます。

答えて

1

setattr()辞書

は、Python

myObjs = ['myObject1','myObject2','myObject3'] 

for obj in myObjs: 
    setattr(className, obj, mayaClass.create(vars()[objs])) 
    func1() 
    func2() 
の重要な組み込みコマンドのための http://docs.python.org/library/functions.htmlを見てきたように、指定された値
vars()へ(文字列で与えられた)オブジェクトの属性は、ローカル変数を取得します設定します

EDIT: 別の回答にも気づいたexec。これを任意のPythonコードで使用する場合は注意してください。

+0

ありがとう、それは素晴らしい作品です。 –

2

setattr()

関数、属性に値を割り当て、オブジェクトがそれを可能に提供しました。たとえば、setattr(x, 'foobar', 123)x.foobar = 123に相当します。

+1

あなたは、あなたの答えを少なくともちょっとだけ詳しく説明できます – juliomalegria

+0

@ julio.alegria:Better? –

+1

よく、私は誰もが自分のスタイルを持っていると思う。 – juliomalegria

0

はイグナシオによってsetattr()の回答に加えて、私はまた、exec()ステートメントを使用するpossibiltyを言及したいと思います。これにより、現在のスコープ内でPythonコードとして文字列を実行することができます。

関連する問題