2

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

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

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

meta = self.get_meta(param)

还有其他想法吗?

(更新了我的例子)

4

3 回答 3

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))
于 2012-11-11T01:30:29.150 回答
1

这似乎是您应该使用映射来做的事情。除非您需要过滤参数,否则这听起来是个坏主意。

所以你会有这样的东西:

class Meta(IterableUserDict):
    pass

meta = Meta()
meta.update(param)
于 2012-11-11T01:30:16.050 回答
0

扩展所说的内容,包括默认值

PARAMETERS = [
    ('param1', "default"),
    ('param2', "default2"),
    # ...
]

meta = Meta()
for name, default in PARAMETERS:
    setattr(meta, name, param.get(name, default))
于 2012-11-11T01:55:40.517 回答