[英]Is it possible to import a Python module (.py file) into a dict?
类似于以下内容:
在一个文件中:
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('__')}
使用vars
怎么样?
import module
my_stuff = vars(module)
import module
my_stuff = module.__dict__
请注意,此字典是模块用于保存其属性的实际字典。 如果您执行my_stuff['foo'] = 3
,则module
具有等于3
的新foo
属性。
如果只想通过在运行时确定的名称来获取属性,则不需要dict。 你可以做
thing = getattr(module, thingname)
如果只关心访问模块成员的方式,则可以使用:
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
进行导入将使您的全局上下文保持整洁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.