Pythonの@propertyの意味を説明する。
結論
クラス内にアンダースコア(_)で始まる変数( = 外部からアクセスされたくない変数)が有ったとして、下記のように記述することにより、外部からその変数にアクセスされたときの処理を設定できる。
class クラス名:
def __init__(self, arg):
self._変数 = arg
@property
def 変数(self):
# 外部からアクセスされたときの処理
return self._変数
外部からその変数にアクセスするときは下記のようにアンダースコア無しでアクセスする。
print(クラスのインスタンス.変数)
※アンダースコア有りのままでも外部からアクセスできるが、作法として通常はやらない。下記記事参照。
具体例
- アンダースコアで始まる変数 _エロさ を設定する。これは外部に対しては隠したい変数である。
- 外部からアクセスされたとき用に@propertyを付け、defアンダースコア無しの変数 エロさ 、外部からアクセスされたときの処理を設定する。外部からこの変数にアクセスされたときはこのdef内を通る。
- 外部からアンダースコア無しで変数 エロさ にアクセスしてみる。
class 人間:
def __init__(self, ero):
self._エロさ = ero # 1
@property # 2
def エロさ(self):
print('エロさを知りたいんですか?')
print('じゃあ教えますよ。')
return self._エロさ
ヨシヒコ = 人間(ero='255')
print(ヨシヒコ.エロさ) # 3
4の実行結果
エロさを知りたいんですか?
じゃあ教えますよ。
255
まとめ
Pythonの@propertyの意味を説明した。
コメント