我们有一个消耗大约50到100个查询参数的api。目前,处理程序获取所有参数并将它们设置为Meta对象中的属性。像这样的东西
meta = Meta()
meta.param1 = param.get('param1', 'somedefault')
meta.param2 = param.get('param2', 'someotherdefault')
等等。我的问题是,有没有更好的方法来处理这个,而不仅仅是处理程序中的一个loooong分配列表?我目前的想法是将其分解为辅助函数。
meta = self.get_meta(param)
还有其他想法吗?
(更新我的例子)
答案 0 :(得分:2)
PARAMETERS = [
'param1',
'param2',
# ...
]
meta = Meta()
for name in PARAMETERS:
setattr(meta, name, param[name])
根据您的评论...
DEFAULTS = {
'param1': 1,
'param2': 'something',
}
meta = Meta()
for name, value in DEFAULTS.items():
setattr(meta, name, param.get(name, value))
答案 1 :(得分:1)
这似乎是你应该用映射做的事情。除非您需要过滤参数,否则这听起来不错。
所以你会有这样的事情:
class Meta(IterableUserDict):
pass
meta = Meta()
meta.update(param)
答案 2 :(得分:0)
据说有什么扩展,包括默认值
PARAMETERS = [
('param1', "default"),
('param2', "default2"),
# ...
]
meta = Meta()
for name, default in PARAMETERS:
setattr(meta, name, param.get(name, default))