PythonのProperty

Pythonのクラスオブジェクトでは、

instance.var = 10

とやればインスタンス変数がアクセスできる。基本的にすべてpublicになる。変数名に「__」をつけるとprivateになるとかのテクニックもあるが、使ったことはない。

で、気持ちとしては

instance.var = 10

とやればsetter(みたいなもの)を呼んでほしい。insetance.setVar(10) というのは、ちょっと飽きた。__set__()を定義してやると実現可能なのはどっかで読んだ気がするんだけど、これだとすべてのプロパティを1メソッドで対応しないといけない(という気がした。うろ覚え)ので、非現実的。

で、探していたらこんなのを発見した。

http://users.rcn.com/python/download/Descriptor.htm

簡単に書くと、こうするとプロパティが実現できるのだ。

class C(object):
    def getx(self): return self.__x
    def setx(self, value): self.__x = value
    def delx(self): del self.__x
    x = property(getx, setx, delx, "I'm the 'x' property.")

簡単じゃん!property()の呼び出しが、クラス定義の下のほうに来ないといけない(アクセッサメソッドの定義の後でないとならない)のが、ちょっと見苦しいけど、でもこれは便利でしょ。