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 を使って | すぐに忘れる脳みそのためのメモ