所以我开始在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()
它肯定会节省很多打字,缩小脚本大小并使事情更容易维护。
答案 0 :(得分:2)
如果对象允许,该函数会将值赋给属性。例如,
setattr(x, 'foobar', 123)
相当于x.foobar = 123
。
答案 1 :(得分:1)
setattr()
会将对象的属性(由字符串给出)设置为指定值
vars()
将局部变量作为字典
查看http://docs.python.org/library/functions.html有关Python的重要内置函数
myObjs = ['myObject1','myObject2','myObject3']
for obj in myObjs:
setattr(className, obj, mayaClass.create(vars()[objs]))
func1()
func2()
编辑:
我注意到另一个答案提到了exec
。在任何python代码中使用它时要小心。
答案 2 :(得分:0)
除了Ignacio的setattr()
回答之外,我还想提一下使用exec()
语句的可能性。这允许您在当前作用域中将字符串作为python代码执行。