Python:保存动态创建的对象类型

标签 python django class types

我正在使用类型函数动态创建一些对象类型。例如

return type('DynamicType', (object,), dict)

字典取决于用户输入。现在我希望我应该能够保存这个返回的类类型并在不同的 session 中使用相同的类型。一种可能的方法是将字典保存为文本(或保存到数据库中)并从该字典再次创建该对象类型。但是有没有其他方法可以直接保存“类型”?

最佳答案

如何创建一个带有方法来创建、pickle 和 unpickle 动态创建的类型对象的 Factory 类?以下是一个粗略的开始。要使用,只需将对 pickle.dump(type, fh) 的调用替换为 TypeFactory.pickle(type, fh),并将对 pickle.load(fh) 的调用替换为 TypeFactory.unpickle(fh)。

import pickle

class TypeFactory(object):
    def __init__(self):
        pass
    @staticmethod
    def create_type(name='DynamicType', dict={}):
        return type(name, (object,), dict)
    @staticmethod
    def pickle(t, fh):
        dict = t.__dict__.copy()
        name = t.__name__
        for key in dict.keys():
            if key.startswith('__') and key.endswith('__'):
                del dict[key]
        pickle.dump((name, dict), fh)
    @classmethod
    def unpickle(cls, fh):
        name, dict = pickle.load(fh)
        return cls.create_type(name, dict)

关于Python:保存动态创建的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5349398/

相关文章:

java - 单独的相机类别还是合并在一起?

python - 如何创建以变量命名的 python tkinter Canvas 对象并保留此链接以重新配置该对象?

python - numpy 数组可以是 pandas 数据框中的元素吗?

python - Arduino-pyFirmata-Python windows error(5,access denied)

django - EC2 上的 RabbitMQ 消耗大量 CPU

python:更改基类属性

class - 'super().__init__()' 在 python 3.x 中是什么意思?

python - Python 中的 SSH 动态端口转发 ('ssh -D')

python - Django 适配器 CSV 需要数小时才能导入

django 表如何检测表是否为空