我正在进行动态类生成,可以在“编译”时静态地确定。我现在遇到的一个简单的例子大致是这样的:
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实例执行一次文件(从而生成Child1
、Child2
和Child3
)。你知道吗
有没有办法告诉Python编译文件,执行一次以解包Child
类,然后将其编译到pyc
文件中,这样解包只发生一次(甚至在Python脚本的连续执行过程中)?
我还有其他更复杂和更具扩展性的用例,因此仅仅通过手工编写Child
类来摆脱工厂并不是一个真正的选择。另外,如果可能的话,我希望避免额外的预处理器步骤(比如在C预处理器中使用C风格的宏)。你知道吗
如果真的不需要将子类分开,而只需要为这些特定的对象集设置一个“标准配置”,那么可以将ObjectFactory设置为一个包含存储在其中的配置的类。每个实例将能够通过适当的配置吐出GenericChildren,完全绕过类的运行时生成(以及与之相关的调试难题)。你知道吗
不,您必须生成Python代码,这些类被“烘焙”为Python代码。你知道吗
使用某种形式的字符串模板生成Python源代码,将它们保存到
.py
文件中,然后字节编译它们。你知道吗但是,类生成只在启动时发生一次。生产这些产品的成本真的那么高吗?你知道吗
相关问题 更多 >
编程相关推荐