Python

Pythonの@propertyデコレータの使い方

はじめに

Python には @property というデコレータが用意されており、これを使うことで(擬似的に)プライベートなインスタンス変数に対する getter/setter のようなメソッドを作成する事ができます。

本頁では、Pythonの @property デコレータについて以下の内容を説明します。

  • @property デコレータの使い方(getter/setter)
  • @property デコレータを使ってプライベート変数を実現
  • @property デコレータを使う利点

 

本内容は、以下「Effective Python」でも紹介しています。

 

 

@property デコレータの使い方(getter/setter)

  • 必ず getter/setter 経由でインスタンス変数にアクセスさせる
  • インスタンス変数の参照は許可、書換えは禁止させる

ポイント

  • インスタンス変数の prefix(接頭語)に __ (アンダーバー2個)を付ける
  • @property デコレータを付けた getter メソッドを定義
  • setter メソッドを定義しない場合は、読み取り専用になる

 

 

@property デコレータを使ってプライベート変数を実現

上記の例で記述した Python プログラムから、@prop.setter のメソッドを削除します。
すると、書換えしようとすると「AttributeError」の例外が発生します。

SANACHAN
SANACHAN
インスタンス変数 prop を書換えできなくなります。が、_Man__prop で書換えることができます。つまり、Python では疑似的なプライベート変数しか定義できないということ。

 

 

@property デコレータを使う利点

Python の @property デコレータを使う利点は、ずばり以下です。

  • インスタンス変数ごとに getter/setter を用意しなくてよい
    ⇒参照・書換えの際にメソッドを呼ばなくてよいので可動性UP
  • インスタンス変数の参照・書換えの際に後から条件を追加できる
    再利用性を向上できる(他のプロジェクト等で利用できる)

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-Python
-, , ,