コード中でクラスを定義
何をやりたいか?
Pythonであればクラスを定義するには、
class MyClass(object): def __init__(self, value): self.value = value ...
というようにしますが、プログラム実行中に上記のMyClassクラスを生成する、というものです。
クラスを生成する
例えば、定義されているMyObjectをベースクラスにしたMyDirectoryというクラスを動的に生成してみます。 組み込み関数のtypeを使います。
newcls = type("MyDirectory", (MyObject,), {})
これで変数clsにMyDirectoryというクラスが格納されます。Pythonドキュメントでは以下のように説明されています。
type(name, bases, dict)
新しい型オブジェクトを返します。本質的には class 文の動的な形です。
name 文字列はクラス名で、__name__属性になります。bases タプルは基底クラスの羅列で、__bases__ 属性になります。dict 辞書はクラス本体の定義を含む名前空間で、__dict__ 属性になります。たとえば、以下の二つの文は同じ type オブジェクトを作ります:>>> class X(object): ... a = 1 ... >>> X = type('X', (object,), dict(a=1))バージョン 2.2 で 新たに追加 された仕様です。
ここで生成したnewclsは通常のクラスのように使えるので、
obj = newcls()
でMyDirectoryオブジェクトが構築できます。