以动态方式创建字典并自动从功能评估中分配属性

时间:2017-01-23 17:35:27

标签: python dictionary

我正在使用具有此外观的代码:

module.py:

def attribute3():
    return "something3"


def attribute2():
    return "something2"


def attribute1():
    return "something1"

主要的.py:

from module import attribute1, attribute2, attribute3


def main():
    return {
        "attribute1": attribute1(),
        "attribute2": attribute2(),
        "attribute3": attribute3()
    }

print main()

我想知道是否有更好的方法在main函数中创建字典,而无需执行"attribute: function()"。我觉得我在重复自我。

我无权访问module.py代码,因此无法更改为Class。

我使用的是Python 2.5,因为这是一款传统软件。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用getattr并调用返回的任意函数。

import some_module

def create_dict(module, names):
    resp = {}
    for name in names: # Iterate over an arbitrary number of arguments
       # Get the function with the name provided and call it,  
       # setting the response as the value for the name
       resp[name] = getattr(module, name)()
    return resp

print create_dict(some_module, ['attribute1', 'attribute2', 'attribute3'])

我没有在Python 2.5上对此进行测试,但我没有看到任何原因导致它无法正常工作。