Pythonで@propertyデコレータを使ってクラスのプロパティの書き換えを禁止する
pandas_datareader.fred.FreadReaderのコードを眺めていて、下記のような記述に遭遇しました。
@property def url(self): return "http://research.stlouisfed.org/fred2/series/"
コードはgitで手に入れることができます。
git clone https://github.com/pydata/pandas-datareader.git
@propertyデコレータって何だっけ?と疑問に思って調べてみました。
要約すると、
- Pythonではクラスのプロパティの読み出し・書き込み・削除に、それぞれgetter・setter・deleter関数を設定できる。
- @propertyデコレータはgetter定義に使用する。
- プロパティにgetterのみを定義し、setter・deleterを定義しないことで、プロパティの書き換え・削除を禁止できる。
というわけで、上記のコードは読み出しオンリーのプロパティを定義していたというわけでした。
ちなみに、getter・setterはPythonにかぎらずOPPOOPでは一般的な用語のようです。
qiita.com