Pythonのproperty装飾器
6786 ワード
他の言語では、例えばJavaとC++は、クラスを実現する時に、getとsetの方法を実現して、プライベート属性の変更を制御して、コードの中で直接使用することを防止します。オペレータは属性値を変えて、予想できないエラーと結果をもたらします。pythonには別のアイデアがあります。これがproperty装飾器です。例えば以下のコード:
class Plane(object):
""""
"""
def __init__(self):
self._alive = True
self._score = 0
# alive , p.alive ,
@property
def alive(self):
print(" alive ")
# property , , ,
if not self._alive:
self.cancel_schedule()
return self._alive
# property setter , python
@alive.setter
def alive(self, value):
print(" alive.setter ")
self._alive = value
if value == False:
self.die_action()
def cancel_schedule(self):
print(' ')
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if value < 0:
print(" ")
else:
self._score = value
self._update_score_brand(value)
def _update_score_brand(self, value):
print(' :%d' % value)
def die_action(self):
print(' ')
p = Plane()
hit = True
if hit:
tmp = p.alive
p.score = -10
print(p.score)
p.alive = False
上のコードの出力結果は以下の通りです。 alive
0
alive.setter
上のコードはC++またはJavaの関数を呼び出すような形でクラスオブジェクトの属性を変更していませんが、実際に効果を発揮したのは私たちがsetとget方法を書いたのと同じです。