Edited at

python property


property

pythonで自分で定義したオブジェクトから値を取得したり更新したり削除したりしたい時の

動作を定義することができる機能


使ってみる


まずはpropertyを使わない場合

class NoProperty(object):

def __init__(self, x):
self_x = x

def get_x(self):
return self._x

def set_x(self, v):
self._x = abs(v)

def del_x(self):
self._x = None


実行結果

nopro = NoProperty(100)

print(nopro.get_x()) # 100

nopro.set_x(-200)
print(nopro.get_x()) # 200

nopro.del_x()
print(nopro.get_x()) # None



同じことをpropertyを使って表現

class MyProperty(object):

def __init__(self, x):
self._x = x

@property # propertyの時は x.getterと同義
def x(self):
return self._x

@x.setter
def x(self, v):
self._x = abs(v) # 更新前に何らかの処理をはさめる

@x.deleter
def x(self):
self._x = None


実行結果


mypro = Myoperty(100)
print(mypro.x) # 100

mypro.x = -200
print(mypro.x) # 200

del mypro.x
print(mypro.x) # None


使わない場合と実行の仕方が違うことに注意


propertyを使って動作を制限

class MyProperty(object):

def __init__(self, x):
self._x = x

@property
def x(self):
return self._x


実行結果

mypro = Myoperty(100)

print(mypro.x) # 100

mypro.x = -200
AttributeError # 定義されていないのでエラー


読み取り専用として使いたい時などに便利