propertyが使えないだと!?
Pythonでpropertyを使ってみようと思って、大いにハマったのでメモ。
class Class: def __init__(self, a): self._a = a def get_a(self): return self._a def set_a(self, v): if v < 20: self._a = v else: print "ERROR" a = property(get_a, set_a) if __name__ == "__main__": c = Classes(10) c.a = 100 print c.a
propertyのテストでお馴染のコードだが、何故か出力が100になる。set_aが呼ばれてないのである。
ここでobjectを継承する。
class Class(object): def __init__(self, a): self._a = a def get_a(self): return self._a def set_a(self, v): if v < 20: self._a = v else: print "ERROR" a = property(get_a, set_a) if __name__ == "__main__": c = Classes(10) c.a = 100 print c.a
こうするとちゃんとERRORが出力され、10が出力される。
setterを呼ぶには何故かobjectの継承が必要だよ、という話だが、原因が良く分からない。基本的な所な気がするので後で調べる。