@property装饰器:可以把一个方法变成属性调用。 class Student(object):
@property def score(self): return self._score
@score.setter def score(self, value): if not isinstance(value, int): raise ValueError(‘score must be an integer!’) if value < 0 or value > 100: raise ValueError(‘score must between 0 ~ 100!’) self._score = value
s = Student() s.score = 60 # OK,实际转化为s.set_score(60) s.score # OK,实际转化为s.get_score() 60
s.score = 9999 Traceback (most recent call last): … ValueError: score must between 0 ~ 100!
@staticmethod和@classmethod的作用与区别 如果在@staticmethod中要调用到这个类的一些属性方法,只能直接类名.属性名或类名.方法名。而@classmethod因为持有cls参数,可以来调用类的属性,类的方法,实例化对象等,避免硬编码。