使导入模块 return 成为变量

Make import module return a variable

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

例如

import module
print(module['key'])

并在 module.py

return {'key':'access'}

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

特别是当导入 module 时,我想在 module 和 return 中动态构建字典。

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

正如您所指出的,您可以使用 class,但不能使用模块,因为模块不是 subscriptable.Now 我不会问 为什么 你想用 import 来做到这一点,但这是可以做到的。

你要做的是创建一个 class 来做你想做的,然后让模块在导入时用 class 替换自己。这当然是一个'bit of a hack'(tm)。我在这里使用 UserDict,因为它可以通过 class 属性 data 轻松访问字典,但您可以在此 class:

中做任何您喜欢的事情
# 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