propertyが使えない原因

propertyが使えない理由は、propertyが新スタイルのクラスを要求するからだと分かった。

http://www.python.jp/doc/release/reference/datamodel.html#newstyle

要約すると、Pythonは2.1から新クラスを導入したが、互換性維持の為、新クラスを利用する場合は、objectを継承する必要がある、ということらしい。

あと、Python3では新クラスに最初から対応しているらしい上に、新しいpropertyの書き方が実装されてる。

class Class:
    def __init__(self, a):
        self._a = a

    @property
    def a(self):
        return self._a

    @a.setter
    def a(self, v):
        if v < 20:
            self._a = v
        else:
            print("ERROR")

if __name__ == "__main__":
    c = Class(10)
    c.a = 100
    print(c.a)