在python中处理大量的查询参数

时间:2012-11-11 01:27:55

标签: python design-patterns

我们有一个消耗大约50到100个查询参数的api。目前,处理程序获取所有参数并将它们设置为Meta对象中的属性。像这样的东西

meta = Meta()
meta.param1 = param.get('param1', 'somedefault')
meta.param2 = param.get('param2', 'someotherdefault')

等等。我的问题是,有没有更好的方法来处理这个,而不仅仅是处理程序中的一个loooong分配列表?我目前的想法是将其分解为辅助函数。

meta = self.get_meta(param)

还有其他想法吗?

(更新我的例子)

3 个答案:

答案 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))