python - 在 Python 中使用 Eval 创建类变量

标签 python wxpython scientific-computing

我编写了一个类,它允许我传入变量类型、变量名称、提示和默认值的列表。该类创建一个 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/

相关文章:

python - 类型错误 : __init__() takes at least 3 arguments (1 given)

python - 跨平台部署,安装方便

c++ - 在 Mac OS X 上构建 Trilinos(科学计算库)时遇到问题

performance - Haskell 是否适合长时间运行的应用程序?

javascript - 通过对 Flask 的函数调用更新值

python - N-puzzle a-star python求解器效率

python - 如何在 Python 中进行动态类生成? (或者一系列 if/else 会更好)

python - 在 Python 中比较随机结果并将其转换为 JSON 文件上的 "points"的简单方法

python - 如何在wxpython中的按钮文本中写一个 "&"

python - 如何将 wxPython wx.html.HtmlWindow 滚动回到用户单击链接时的位置?