当Maya找不到这些属性时,如何从列表中连接属性?

时间:2018-01-22 19:19:17

标签: maya python

我要做的是从对象A到对象B的批量连接属性。只是转换属性,所以,我这样做了:

import maya.cmds as mc

sel = mc.ls(sl=True)

mc.connectAttr(sel[0]+'.t', sel[1]+'.t')
mc.connectAttr(sel[0]+'.r', sel[1]+'.r')
mc.connectAttr(sel[0]+'.s', sel[1]+'.s')

然后我认为如果我创建一个包含(translaterotatescale)的列表并且只是迭代该列表而不是指定{{1},那会更聪明},".t"".r"

所以我这样做了:

".s"

...控制台说

import maya.cmds as mc

sel = mc.ls(sl=True)
attributes = ['.t', '.r', '.s']

for attr in attributes :
    mc.connectAttr(sel[0].attr, sel[1].attr)

我做了一些搜索,但这并没有帮助我理解。有人可以解释为什么会这样,以及我如何才能达到预期的效果?

1 个答案:

答案 0 :(得分:2)

你的最后一行必须是:

mc.connectAttr(sel[0]+attr, sel[1]+attr)

您正在使用.,就好像它是Python中的字符串连接错误,而+是。

.是属性运算符,它解释了您的错误¹。当Python尝试解释sel[0].attr时,它首先注意sel[0]unicode对象,然后尝试从该对象获取属性attr。此属性与循环中的attr无关,特别是不存在。因此你得到的错误信息。

1 Python中的每个对象都有一些属性,您可以使用该语法访问这些属性,这取决于类型对象。要熟悉这个尝试:

a = 42
print(a.numerator)
print(a.denominator)

print(a.wrzlprmft)
# Raises AttributeError. This is what happened to you.

print(denominator)
# Raises NameError.
# This demonstrates that denominator is only defined as an attribute of a.