Python | @propertyの意味

変数

Pythonの@propertyの意味を説明する。

結論

クラス内にアンダースコア(_)で始まる変数( = 外部からアクセスされたくない変数)が有ったとして、下記のように記述することにより、外部からその変数にアクセスされたときの処理を設定できる。

class クラス名:
    def __init__(self, arg):
        self._変数 = arg

    @property
    def 変数(self):
        # 外部からアクセスされたときの処理
        return self._変数

外部からその変数にアクセスするときは下記のようにアンダースコア無しでアクセスする。

print(クラスのインスタンス.変数)

※アンダースコア有りのままでも外部からアクセスできるが、作法として通常はやらない。下記記事参照。

具体例

  1. アンダースコアで始まる変数 _エロさ を設定する。これは外部に対しては隠したい変数である。
  2. 外部からアクセスされたとき用に@propertyを付け、defアンダースコア無しの変数 エロさ 、外部からアクセスされたときの処理を設定する。外部からこの変数にアクセスされたときはこのdef内を通る。
  3. 外部からアンダースコア無しで変数 エロさ にアクセスしてみる。
class 人間:
    def __init__(self, ero):
        self._エロさ = ero                   # 1

    @property                               # 2
    def エロさ(self):
        print('エロさを知りたいんですか?')
        print('じゃあ教えますよ。')
        return self._エロさ

ヨシヒコ = 人間(ero='255')
print(ヨシヒコ.エロさ)                        # 3

4の実行結果

エロさを知りたいんですか?
じゃあ教えますよ。
255

まとめ

Pythonの@propertyの意味を説明した。

コメント