python如何将动态创建类转储到文件

时间:2019-07-02 06:33:39

标签: python django metaclass inspect

我一直在动态创建python元类

我想将其转储到python文件中

cls = type("ClsName", (object, ), attr)
code = xxxGetSource(cls)
writeToFile(code, "moduleName/ClsName.py")

我需要这个,因为在进行django makemigrations时,它需要找到模型的元类,但是我的模型元类是动态生成的

class XXXModel(GenerateCls({ .... }),
               models.Model):
    pass

1 个答案:

答案 0 :(得分:0)

尽管Django确实具有启用此功能的工具,但实际上并不需要。 您需要具备的是,在导入server_1 | INFO [my_libs.hdfs] 2019-07-01 01:01:01 [info ] Initialized HDFS [my_libs.hdfs] modline=my_libs.hdfs:31 时,动态创建的类必须在模块名称空间中可用。

因此,您要做的就是调用在models.py模块级别上在代码中创建类的任何代码,并确保它们在此处可见-可以很简单:

models.py

如果在编写代码时不知道类的名称和数量,则可以使用类及其名称来更新from django.db import models def create_classes(): Meta = type("Meta", (), {"app_label": "test2"}) DynamicUser = type("DynamicUser", (models.Model,), {"name": models.TextField(255), "__module__": __file__, "Meta": Meta}) return DynamicUser DynamicUser = create_classes() 返回的字典。 假设globals()函数将返回一个包含类的列表-一个可以在create_classes

中完成的操作
models.py