AT's Blog

趣味のプログラミング、ギター、音楽とかとか

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デコレータって何だっけ?と疑問に思って調べてみました。

nametake-1009.hatenablog.com

要約すると、

  • Pythonではクラスのプロパティの読み出し・書き込み・削除に、それぞれgetter・setter・deleter関数を設定できる。
  • @propertyデコレータはgetter定義に使用する。
  • プロパティにgetterのみを定義し、setter・deleterを定義しないことで、プロパティの書き換え・削除を禁止できる。

というわけで、上記のコードは読み出しオンリーのプロパティを定義していたというわけでした。

ちなみに、getter・setterはPythonにかぎらずOPPOOPでは一般的な用語のようです。 qiita.com