pythonでクラスメソッドを使ってみる
C++やJavaなんかにあるクラスメソッド。実はpythonでも使えるそうな。 あんまり使いそうな気がしないけれど、とりあえず試してみました。
class Test(object):
    count = 0
    def __init__(self):
        self.__addCount()
    @classmethod
    def __addCount(cls):
        cls.count += 1
    @classmethod
    def getCount(cls):
        return cls.count
print Test.getCount()   # 0
Test()  # 1回目のインスタンス化
print Test.getCount()   # 1
Test()  # 1回目のインスタンス化
print Test.getCount()   # 2
インスタンス化された回数を数えてくれる。
注意が必要なのは、
def __init__(self):
    self.count += 1
みたいにしてはいけないということ。
こうするとインスタンス変数としてcountが作られちゃいます。値は1ね。
クラス変数の方を変えてよってことでクラスメソッドの__addCountを作って使っているわけです。
クラスメソッドの宣言は@classmethodってデコレータを使えばおっけー。
第一引数にクラスが渡されることに注意。インスタンスメソッドのselfみたいなもんだね。
綺麗に設計すればオブジェクト指向は便利なんだろうけれど・・・綺麗に・・・うぅむ。
参考: Python のクラスメソッド – デコレータ @classmethod, @staticmethod を使って | すぐに忘れる脳みそのためのメモ