是否可以将Python模块(.py文件)导入dict?

时间:2014-02-22 12:23:28

标签: python python-import

有些事情:

在一个文件中:

FOO_CONST = 'bar'

def some_function(baz)
    return do_something_with(baz)

from somewhere import something

blah = something()

在另一个档案中:

my_stuff = import_as_dict("module")

my_stuff基本上相当于:

{
    'FOO_CONST': 'bar',
    'some_function': <function my_function at ...>,
    'blah': 'I am the result of calling the function "somewhere.something".',
}

任何可以开箱即用的库?

更新

vars(module) == module.__dict__以来,我已经提出了两个答案,但接受了一个更多数据的答案。这个代码几乎完全返回了我的想法:

my_stuff = {(key, var) for key, var in vars(module).items() if not key.startswith('__')}

3 个答案:

答案 0 :(得分:4)

如何使用vars

import module
my_stuff = vars(module)

答案 1 :(得分:2)

import module
my_stuff = module.__dict__

请注意,此dict是模块用于保存其属性的实际dict。如果您执行my_stuff['foo'] = 3,则module的新foo属性等于3

如果您只想按运行时确定的名称获取属性,则不需要dict。你可以做到

thing = getattr(module, thingname)

答案 2 :(得分:0)

如果您只关心访问模块成员的方式,可以使用:

my_sys = import_as_dict("sys")
print my_os["sys"]

使用以下代码:

import imp


class DictProxy(object):
    def __init__(self, target):
        super(DictProxy, self).__init__()

        self.target = target

    def __getitem__(self, key):
        return getattr(self.target, key)

    def __setitem__(self, key, value):
        setattr(self.target, key, value)


def import_as_dict(module_name):
    file_, pathname, description = imp.find_module(module_name)
    module = imp.load_module(module_name, file_, pathname, description)
    dict_module = DictProxy(module)
    return dict_module

使用imp进行导入将保持全局上下文清洁。