使导入模块 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
我想让一个导入的模块表现得像一个对象,即。字典。
例如
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