Sto facendo una generazione di classi dinamiche che potrebbe essere statica determinata in fase di "compilazione". Il caso semplice che ho in questo momento sembra più o meno così:Risultati permanenti nella cache della generazione della classe 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')
Durante l'importazione, l'interprete Python sembra compilare in bytecode, quindi eseguire il file (generando così Child1
, Child2
, e Child3
) una volta al Istanza di Python
C'è un modo per dire Python per compilare il file, eseguirlo una volta per decomprimere i Child
classi, quindi compilare che nel file pyc
, in modo che il disimballaggio accade solo una volta (anche attraverso esecuzioni successive dello script Python)?
Ho altri casi di utilizzo che sono più complicati ed espansivi, quindi semplicemente liberare la fabbrica scrivendo manualmente le classi Child
non è davvero un'opzione. Inoltre, vorrei evitare un ulteriore passo del preprocessore se possibile (come l'uso delle macro in stile C con il preprocessore C).
Non costa molto per classe, ma ho un sacco di casi simili e ho bisogno di generare molte istanze python spesso, quindi si aggiunge, specialmente in caso di carico elevato (nel qual caso l'inizializzazione può richiedere il grosso del tempo per un programma a breve durata). – CSTobey
+1 per l'utilizzo di un template templating durante la generazione del codice Python. – thebjorn