どぶお/Pythonで遊ぼう!

コード中でクラスを定義  

何をやりたいか?  

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 で 新たに追加 された仕様です。

Python 2.6.2 組み込み関数の3つの引数のtype()

ここで生成したnewclsは通常のクラスのように使えるので、

obj = newcls()

でMyDirectoryオブジェクトが構築できます。