「コンパイル」時に静的に決定できる動的なクラス生成を行っています。私が今持っている単純なケースは、多かれ少なかれ次のようになります。
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インスタンスごとに1回ファイルを実行するように見えます(したがってChild1
、、、Child2
およびを生成します)。Child3
Pythonにファイルをコンパイルし、それを1回実行してChild
クラスを解凍し、それをpyc
ファイルにコンパイルして、解凍が1回だけ(Pythonスクリプトの連続実行間でも)行われるようにする方法はありますか?
他にももっと複雑で拡張性のあるユースケースがあるので、クラスを手書きしてファクトリを単純に取り除くことChild
は実際にはオプションではありません。また、可能であれば、余分なプリプロセッサの手順を避けたいと思います(CスタイルのマクロをCプリプロセッサで使用するなど)。