使导入模块返回一个变量

时间:2018-03-15 11:49:41

标签: python-3.x python-import

我想让导入的模块表现得像一个对象,即。一本字典。

E.g。

import module
print(module['key'])

并在module.py

return {'key':'access'}

通过从Class继承来dict非常容易,但如何在模块级别执行此操作?

特别是我想在module中动态构建字典,并在导入module时返回它。

我知道还有其他解决方案,例如在dict工作区中将var定义为module并通过module.var访问它,但我对此感兴趣这是可能的。

1 个答案:

答案 0 :(得分:1)

正如您所指出的,您可以使用类来完成此操作,但不能使用模块,因为模块不是可订阅的。现在我不会要求为什么您要使用一个import,但可以做到。

您所做的是创建一个可以执行所需操作的类,然后让模块在导入时将其替换为类。这当然是一个“黑客”(tm)。在这里我使用UserDict,因为它可以通过类attr data轻松访问dict,但你可以在这个类中做任何你喜欢的事情:

# module.py

from collections import UserDict
import sys
import types

class ModuleDict(types.ModuleType, UserDict):
    data = {'key': 'access}

sys.modules[__name__] = ModuleDict(__name__)

然后您可以导入模块并根据需要使用它:

# code.py

import module
print(module['key']
# access