永久缓存Python类生成的结果

CST*_*bey 5 python metaprogramming python-2.7

我正在做动态类生成,可以在"编译"时间静态确定.我现在的简单案例看起来或多或少是这样的:

class Base(object):
    def __init__(self, **kwargs):
        self.do_something()

def ClassFactory(*args):
    some_pre_processing()
    class GenericChild(Base):
        def __init__(self, **kwargs):
            self.some_processing()
            super(GenericChild, self).__init__(*args, **kwargs)
    return GenericChild

Child1 = ClassFactory(1, 'Child_setting_value1')
Child2 = ClassFactory(2, 'Child_setting_value2')
Child3 = ClassFactory(3, 'Child_setting_value3')
Run Code Online (Sandbox Code Playgroud)

在导入时,Python解释器看起来编译成字节码,然后执行该文件(因此产生Child1,Child2Child3)每一次Python的实例.

有没有办法告诉Python编译文件,执行一次以解压缩Child类,然后将其编译到pyc文件中,这样解压缩只发生一次(即使是连续执行Python脚本)?

我有其他更复杂和更广泛的用例,所以简单地通过手工编写Child类来摆脱工厂并不是一个真正的选择.另外,如果可能的话,我想避免额外的预处理器步骤(比如在C预处理器中使用C风格的宏).

Mar*_*ers 1

不,您必须生成 Python 代码,而不是将这些类“烘焙”为 Python 代码。

使用某种形式的字符串模板来生成 Python 源代码,将其保存到.py文件中,然后对它们进行字节编译。

然而,类生成仅在启动时发生一次。产生这些的成本真的那么高吗?