python的@property的标注,类似于sprint的@bean标注
第一个score(self)是get方法,用@property装饰,
第二个score(self, score)是set方法,用@score.setter装饰,
@score.setter是前一个@property装饰后的副产品。
后面的可以增加@property/@score.getter
当有多个@score.setter,会运行最后一个,当有多个@score.getter,会运行最后一个
class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
@property
def score(self):
print '1'
return self.__score
@score.setter
def score(self, score):
print '2'
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
@score.setter
def score(self, score):
print '2.1'
if score < 0 or score > 100:
raise ValueError('invalid score111')
self.__score = score+1
@score.getter
def grade(self):
print '3'
if self.score >= 80:
return 'A'
elif self.score <60:
return 'B'
else:
return 'C'
@score.getter
def grade(self):
print '3.1'
return self.score
s = Student('Bob', 59)
print s.grade
s.score = 60
#print s.grade
#s.score = 99
#print s.grade