我要做的是从对象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')
然后我认为如果我创建一个包含(translate
,rotate
和scale
)的列表并且只是迭代该列表而不是指定{{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)
我做了一些搜索,但这并没有帮助我理解。有人可以解释为什么会这样,以及我如何才能达到预期的效果?
答案 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.