Pythonの@propertyについて調べてみた
auです。
特殊文字で検索に引っかからなそうですが、Pythonの関数の上についている「@property」について調べてみました。
property
Pythonのpropertyは、以下のようにして使われています。
class TestProparty(): def __init__(self, n): self._n = n @property def get_n(self): return self._n
これは「デコレータ」と呼ばれており、property以外にも色々あります。
propertyの場合は、「読み取り専用の関数」として定義されます。「getter」専用の関数となるわけですね。
実際に使ってみます。
class TestProparty(): def __init__(self, n): self._n = n @property def n(self): return self._n instance = TestProparty(100) print(instance.n) # 100 instance.n = 1000 # Traceback (most recent call last): File "test.py", line 16, in <module> instance.n = 1000 AttributeError: can't set attribute
nの値を書き換えようとしても、エラーで弾かれてしまいます。
明示的にsetterをつけることで、値の更新をすることができます。
class TestProparty(): def __init__(self, v): self._n = v @property def n(self): return self._n @n.setter def n(self, v): self._n = v instance = TestProparty(100) print(instance.n) # 100 instance.n = 1000 print(instance.n) # 1000
今度はエラーなく書くことができました。
propertyの関数名.setter
を記述することでsetterを利用できるようになります。