2个装饰器函数名称为什么不一样?
@property
def score(self):
return self.__score
@score.setter
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
@property
def score(self):
return self.__score
@score.setter
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
2018-09-29
楼主可以把这种写法当成python的语法规范,比如为什么定义一个函数要用def,一样的道理。
property是“属性”的意思,@property就是把实例方法当做属性调用的语法。set是“设置”的意思,setter就是“设置器”。@score.setter就是给这个类下的score属性重新设定值的时候,调用这个方法。
按实际的用法,如果一个语句是s.score,就是要获取属性,所以python会直接找@property这个装饰器下面有没有score这个方法,有就直接调用了。如果另一个语句是s.score = 99,这就是要设置属性,python就会去找@score.setter这个装饰器,并运行下面的方法。
举报