1.在类中,有时需要限制输入的内容,可以用一个set来输入需要的内容,用get来取得输入的内容
2.其实说白,上述所说的方法就是用来检查输入内容,让人们不能随心所欲的设置了。
参见下面的例子:
1 class Student(object): 2 def get_score(self): 3 return self.__score 4 def set_score(self, value): 5 if not isinstance(value, int): 6 raise ValueError("score must be an integer!") 7 if value < 0 or value > 100: 8 raise ValueError("score must between 0 ~100") 9 self.__score = value调用方法如下:>>>s = Student()>>>s.set__score(89)>>>s.get_score()89
虽然上面的函数可以检查参数,但是略显复杂。没有直接调用属性的这么简单直接。
有没有既检查参数,又可以用类似属性这样的简单的方法来访问类的变量。万能的python来说,这是可以解决的。。。。
Python内置的@property装饰器就是负责把一个方法变成属性的。
方法如下:
1 class Student(object): 2 @property 3 def score(self): 4 return self._score ###(getter方法) 5 @score.setter ###(@property装饰器本身又创建了另外一个装饰器,@score.setter) 6 def score(self, value): 7 if not isinstance (value, int): 8 raise ValueError("score must be an integer") 9 if value < 0 or value > 100: 10 raise ValueError("score must be between 0~100") 11 self._score = value ###(setter方法)调用方法如下:>>>s = Student()>>>s.score = 60>>>s.score60
###利用@property还可以只定义只读属性,既只定义getter方法;
setter方法可以认为是可写属性
### 注意@property的位置
时间: 2024-11-09 11:01:46