创建一个变量名动态
问题描述:
我有这样的代码来创建一个接口和一些按钮(在Maya中的Python)创建一个变量名动态
class mrShadowMapChangerUI:
def __init__(self):
smAttrs = ['shadowMap','smapResolution','smapSamples','smapSoftness','smapBias']
smNiceAttrs = ['Active','Resolution','Samples','Softness','Bias']
attrs = zip(smAttrs,smNiceAttrs)
self.form = mc.columnLayout()
self.smapResolutionField = mc.textFieldButtonGrp( label=attrs[1][1], text=int(defaultLightValues[1]), bc=Callback(self.setSmValue, attrs[1][0]))
self.smapSamplesField = mc.textFieldButtonGrp( label=attrs[2][1], text=int(defaultLightValues[2]), bc=Callback(self.setSmValue, attrs[2][0]))
self.smapSoftnessField = mc.textFieldButtonGrp( label=attrs[3][1], text=('%.3f' % defaultLightValues[3]), bc=Callback(self.setSmValue, attrs[3][0]))
self.smapBiasField = mc.textFieldButtonGrp( label=attrs[4][1], text=('%.3f' % defaultLightValues[4]), bc=Callback(self.setSmValue, attrs[4][0]))
,我想将它变成像这样的东西自动,知道他们创建的按钮名字(所以我以后可以查询他们)
class mrShadowMapChangerUI:
def __init__(self):
smAttrs = ['shadowMap','smapResolution','smapSamples','smapSoftness','smapBias']
smNiceAttrs = ['Active','Resolution','Samples','Softness','Bias']
attrs = zip(smAttrs,smNiceAttrs)
self.form = mc.columnLayout()
for attr in attrs:
self.('%s' % attr[0]) = mc.textFieldButtonGrp( label=attr[1], text=int(defaultLightValues[1]), bc=Callback(self.setSmValue, attr[0]))
mc.showWindow(self.window)
我真的有理解这一切的烦恼“自我”。工作流程,所以可能我失去了一些基本的东西,但所有我迄今为止所尝试的都没有工作:S
谢谢!
答
这只是一个语法问题。在语法中指定的属性必须是标识符,如果你想你需要使用getattr
或setattr
(或delattr
)生成的属性:
for attr, nice in zip(attrs, niceAttrs):
setattr(self, attr, value)
替换value
你想要的值。这与self
无关:self
只是另一个函数参数,其行为与其他变量相同。
答
setattr
怎么样?
class Foo:
def __init__(self):
# Set attribute "bar" on this object to the number 1
setattr(self, "bar", 1)
+0
我喜欢备用语法'x.foobar = 123'(在提供商链接中也提到) – 2012-01-12 07:14:22
非常感谢。我昨天有同样的问题,但与getattr,似乎我需要多一点时间来了解这些:) 再次感谢 – nookie 2012-01-12 07:20:39