0

所以我开始在 maya 中使用 Python API,一些工具要求我在各种对象上迭代代码。这需要将带有名称的对象引用附加到对象创建者的输出中,然后在调用后立即运行函数。

而不是运行(假设示例):

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

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

ETC..

有没有办法我可以说这样做:

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

它肯定会节省大量打字,缩小脚本大小并使事情更容易维护。

4

3 回答 3

2

setattr()

The function assigns the value to the attribute, provided the object allows it. For example, setattr(x, 'foobar', 123) is equivalent to x.foobar = 123.

于 2012-05-03T03:30:20.940 回答
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 代码中使用它时要小心。

于 2012-05-03T04:02:05.280 回答
0

除了setattr()伊格纳西奥的回答,我还想提一下使用该exec()声明的可能性。这允许您在当前范围内将字符串作为 python 代码执行。

于 2012-05-03T03:38:46.867 回答