我要修改包含嵌套属性的参数,这些属性需要按以下方式修改:
parameters.foo.bar.set(newvalue)
我想通过这种方式访问几十个值
我怎样才能创建一个不需要eval就可以执行以下操作的函数:
def change_params(dict_new_values):
global parameters
for key,val in dict_new_values.items():
eval("parameters."+key+".set(val)")
我的问题是eval可以说是不安全的,因为字典的值来自外部
我目前的解决方法是逐个检查path\u参数可能具有的所有值,但要更新可能值的列表确实很不方便。这是我说服同事我可以安全使用eval的唯一方法,但eval仍然使代码难以阅读和维护:
list_possible_values=set(["foo.bar","foo.boz","otherparamname","yetanother.path"])
def change_params(dict_new_values):
global parameters
for key,val in dict_new_values.items():
if key in list_possible_values:
eval("parameters."+key+".set(val)")
对于那些了解JavaScript的人,我在python3中寻找能够实现这一点的lodash.get
和lodash.set
的等价物
使用
如果你需要属性的属性,我想你可以这样做:
但是请注意,getter和setter是非语法的,应该改用properties
相关问题 更多 >
编程相关推荐