クラス名を動的に設定するにはどうすればいいですか? 質問する

クラス名を動的に設定するにはどうすればいいですか? 質問する

引数から派生したクラスを作成する関数があります:

def factory(BaseClass) :
    class NewClass(BaseClass) : pass
    return NewClass

これを使用して新しいクラスを作成すると、クラスはすべて同じ名前が付けられ、インスタンスは同じ型を持つように見えます。

NewA = factory(ClassA)
NewB = factory(ClassB)
print type(NewA()) # <class __main__.NewClass>
print type(NewB()) # <class __main__.NewClass>

属性を手動で設定するのが適切な修正方法でしょうか__name__?

NewA.__name__ = 'NewA'
print type(NewA()) # <class __main__.NewA>

ついでに設定すべき他の項目はありますか?

ベストアンサー1

はい、設定は__name__正しい方法です。クラス名を調整するために他に何も設定する必要はありません。

例えば:

def factory(BaseClass) :
    class NewClass(BaseClass): pass
    NewClass.__name__ = "factory_%s" % BaseClass.__name__
    return NewClass

typeそれは間違っているここで使うもの。クラスを定義することはできませんPythonの通常のクラス構文、代わりにすべてのクラス属性を手動で設定する必要があります。これは、手動でクラスを作成するために使用されます。たとえば、基本クラスの配列があり、それを使用してクラスを作成したい場合 (Python のクラス構文では実行できません)。ここでは使用しないでください。

おすすめ記事