s = Student() s.score = 9999
没办法检查参数
可以在类中设定一个set_score()设置参数(函数内设定参数格式),一个fet_score()获取参数
Python内置的@property
装饰器负责把一个方法变成属性调用
class Student(object): @property def score(self): #获取 getter return self._score @score.setter def score(self,value): #设置 setter if not isinstance(value,int): raise ValueError('成绩必须是整数') if value<0 or value>100: raise ValueError('成绩必须在0到100之间') self._score=value
把一个getter方法变成属性,只需要加上@property
就可以了,此时,@property
本身又创建了另一个装饰器@score.setter
,负责把一个setter方法变成属性赋值,于是,我们就拥有一个可控的属性操作:
还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:
class Student(object): @property def birth(self): return self._birth @birth.setter def birth(self, value): self._birth = value @property #只有getter,只读属性 def age(self): return 2015 - self._birth
class Screen(object): @property def width(self): return self._width @width.setter def width(self,value): if not isinstance(value, int): raise ValueError('score must be an integer!') self._width=value @property def height(self): return self._height @height.setter def height(self,value): if not isinstance(value, int): raise ValueError('score must be an integer!') self._height=value @property def resolution(self): return self._width*self._height