メモ: Pythonにおけるクラス変数の挙動
Python 2.6言語リファレンスより:
クラス定義内で定義された変数はクラス変数です; クラス変数は全てのインスタンス間で共有されます。 インスタンス変数を作成するには、メソッドの中で self.name = value でセットできます。クラス変数もインスタンス変数も “self.name” 表記でアクセスすることができます。この表記でアクセスする場合、インスタンス変数は同名のクラス変数を隠蔽します。
http://www.python.jp/doc/release/reference/compound_stmts.html#class
ちょっと記述がピンと来なかったので、短いサンプルで挙動を確認してみました。動作確認環境はUbuntu 10.04に含まれるPython 2.6です。
インスタンスからのクラス変数参照
クラスTestClassの中でクラス変数valueを定義すると、TestClass.valueという形式と、TestClassのインスタンスxについてx.valueという形式の両方でクラス変数を参照できます。
>>> class TestClass: value = 10 >>> TestClass.value 10 # クラス変数としての参照 >>> x = TestClass() >>> x.value 10 # インスタンスからのクラス変数参照