我想让导入的模块表现得像一个对象,即。一本字典。
E.g。
import module
print(module['key'])
并在module.py
return {'key':'access'}
通过从Class
继承来dict
非常容易,但如何在模块级别执行此操作?
特别是我想在module
中动态构建字典,并在导入module
时返回它。
我知道还有其他解决方案,例如在dict
工作区中将var
定义为module
并通过module.var
访问它,但我对此感兴趣这是可能的。
答案 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