引数から派生したクラスを作成する関数があります:
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 のクラス構文では実行できません)。ここでは使用しないでください。