Skip to main content
 首页 » 编程设计

python之设置不带字符串连接的属性

2025年05月04日18shanyou

我想知道是否有一种方法可以执行以下操作,我知道要设置对象的翻译,在 pymel 中就这么简单:

object.translateX.set(1.5)

您还可以使用“setAttr”命令进行设置:

setAttr(object + '.translateX', 1.5) 或 setAttr('%s.translateX' % object, 1.5)

但是,如果我只想将第一个示例与属性名称会更改的更高级的内容一起使用,该怎么办?

示例:

object.translateX.set(1.5) 
object.translateY.set(1.5) 
object.translateZ.set(1.5) 
object.rotateX.set(1.5) 
object.rotateY.set(1.5) 
object.rotateZ.set(1.5) 

我更愿意这样写:

for i in range(0,5,1): 
    t = ['translateX', 'translateY', 'translateZ', 'rotateX', 'rotateY', 'rotateZ'] 
    object.t[i].set(1.5) 

但是这显然行不通,但是有人可以告诉我是否有办法做到这一点吗?

请您参考如下方法:

现在,我不知道 pymel 或任何与 Maya 相关的东西,但如果 object.translateX.set(1.5) 有效,那么我认为访问正常对象属性访问,因此您可以使用 getattr(object, attrname[, default_value]) 按名称获取属性。

BTW range(0, 5, 1) 与 range(5) 相同;并且表示列表 [0, 1, 2, 3, 4 ];你的列表有 6 个元素,所以你需要 range(6) 来迭代它——但是 for 循环可以迭代任何可迭代的,你应该只迭代你的属性名称。因此:

attributes = ['translateX', 'translateY', 'translateZ',  
              'rotateX', 'rotateY', 'rotateZ'] 
for a in attributes: 
    getattr(object, a).set(1.5) 

应该做你想做的。

更新:pymel 似乎也支持对象的 .attr(),因此

for a in attributes: 
    object.attr(a).set(1.5)