如何提取包含模块和类的字典?

2024-09-28 19:34:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要为字典键分配一个模块类。然后把那本词典归档。然后,加载pkl文件,然后根据字典键值导入并实例化该类。在

我试过了:

import module_example
from module_example import ClassExample

dictionary = {'module': module_example, 'class': ClassExample)

但它不会存储对模块的引用_埃克斯梅普.py在pkl文件中。在

我尝试过使用字符串代替模块类名的解决方法。但是如果模块名被重构或者位置被改变了,那么这将导致混乱。在

有没有直接做这个?以某种方式在字典中存储对模块类的引用,然后在以后基于该引用导入和实例化?在


Tags: 模块文件实例frompyimportdictionary字典
2条回答

这适用于单人班。如果要在多个模块和类中执行此操作,可以扩展以下代码。在

模块类_writer.py

import module_example
from module_example import ClassExample

included_module = ["module_example"]
d = {}
for name, val in globals().items():
    if name in included_module:
        if "__module__" in dir(val):
            d["module"] = val.__module__
            d["class"] = name

#d = {'module': module_example, 'class': ClassExample}

import pickle
filehandler = open("imports.pkl","wb")
pickle.dump(d, filehandler)
filehandler.close()

模块类_阅读器.py

^{pr2}$

如果希望未拾取的类与pickle对象完全相同,则必须存储该类的代码(例如,使用dill)之类的外部库。在

否则,标准pickle无法存储对类的引用,该类将在重构后“存活”。在

相关问题 更多 >