我有一个wtform,其中包含天数和开始和结束时间列表:
form.mon_start
form.mon_end
form.tues_start
form.tues_end
...
我必须经常设置这些,我想循环一个列表并将它们设置在一个循环中。类似的东西:
days = ['mon','tues','weds','thurs','fri','sat','sun']
for day in days:
form.[day + '_start'] = #some datetime setting
form.[day + '_end'] = #some datetime setting
这可能吗?
答案 0 :(得分:2)
您可以使用setattr(object, attribute, value)
:
days = ['mon','tues','weds','thurs','fri','sat','sun']
for day in days:
setattr(form, day + '_start', start_value)
setattr(form, day + '_end', end_value)
这会将给定attribute
的{{1}}设置为value
。
答案 1 :(得分:0)
答案 2 :(得分:0)
可以将对象视为词典。事实上,他们有一个 dict 。所以试试这个:
days = ['mon','tues','weds','thurs','fri','sat','sun']
for day in days:
form.__dict__[day + '_start'] = #some datetime setting
form.__dict__[day + '_end'] = #some datetime setting
你会得到你想要的东西。但它有点hackish。
函数setattr(,)做同样的事情,它只是一种明确的(非hackish)这样做的方式,并且无论在 dict :
days = ['mon','tues','weds','thurs','fri','sat','sun']
for day in days:
for mark in [('start', gen_start_func), ('end', gen_end_func)]:
setattr(form, '_'.join([day, mark[0]]), mark[1]())
所以在最后一个版本中我们使用的是setattr(),我们正在使用一个内部循环,它在包含(,)的元组上运行。它是一种不同的做事方式,可能会或可能不会更具可读性,这取决于您尝试解决的问题以及您习惯阅读的代码类型。