我写了一个类,让我传入变量类型,变量名,提示和默认值的列表.该类创建一个wxPython面板,该面板显示在一个框架中,该框架允许用户在按下计算按钮并将结果作为绘图返回之前设置输入值.我使用exec语句将所有变量添加到类中.这将所有变量保存在一个类中,我可以通过名称引用它们.
light = Variables( frame , [ ['f','wavelength','Wavelength (nm)',632.8] ,\ ['f','n','Index of Refraction',1.0],])
在类中,我使用以下语句创建和设置变量:
for variable in self.variable_list: var_type,var_text_ctrl,var_name = variable if var_type == 'f' : exec( 'self.' + var_name + ' = ' + var_text_ctrl.GetValue() )
当我需要使用变量时,我可以通过名称引用它们:
wl = light.wavelength n = light.n
然后我读到SO,很少需要在Python中使用exec.这种方法有问题吗?有没有更好的方法来创建一个类,该类包含应该组合在一起的变量,您希望能够编辑,还有用于显示,编辑的代码和wxPython调用(并且还将所有变量保存到文件中)还是再读一遍)?
生硬的
您可以使用该setattr
函数,该函数有三个参数:对象,属性的名称及其值.例如,
setattr(self, 'wavelength', wavelength_val)
相当于:
self.wavelength = wavelength_val
所以你可以这样做:
for variable in self.variable_list: var_type,var_text_ctrl,var_name = variable if var_type == 'f' : setattr(self, var_name, var_text_ctrl.GetValue())