永久缓存Python类生成的结果

2024-09-30 14:24:20 发布

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

我正在进行动态类生成,可以在“编译”时静态地确定。我现在遇到的一个简单的例子大致是这样的:

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')

导入时,Python解释器似乎编译成字节码,然后对每个Python实例执行一次文件(从而生成Child1Child2Child3)。你知道吗

有没有办法告诉Python编译文件,执行一次以解包Child类,然后将其编译到pyc文件中,这样解包只发生一次(甚至在Python脚本的连续执行过程中)?

我还有其他更复杂和更具扩展性的用例,因此仅仅通过手工编写Child类来摆脱工厂并不是一个真正的选择。另外,如果可能的话,我希望避免额外的预处理器步骤(比如在C预处理器中使用C风格的宏)。你知道吗


Tags: 文件selfchildbaseinitdefargssome
2条回答

如果真的不需要将子类分开,而只需要为这些特定的对象集设置一个“标准配置”,那么可以将ObjectFactory设置为一个包含存储在其中的配置的类。每个实例将能够通过适当的配置吐出GenericChildren,完全绕过类的运行时生成(以及与之相关的调试难题)。你知道吗

不,您必须生成Python代码,这些类被“烘焙”为Python代码。你知道吗

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

但是,类生成只在启动时发生一次。生产这些产品的成本真的那么高吗?你知道吗

相关问题 更多 >