BlankTar

about | blog | works | photo

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 を使って | すぐに忘れる脳みそのためのメモ
< jThree Class Tokyo #2行ってきた。 pythonのクラスでprivateっぽいことをしよう >