我编写了一个类,它允许我传入变量类型、变量名称、提示和默认值的列表。该类创建一个 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())
关于python - 在 Python 中使用 Eval 创建类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1144702/