@property在python类中的应用

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.score
60

###利用@property还可以只定义只读属性,既只定义getter方法;

setter方法可以认为是可写属性

### 注意@property的位置

 

posted @ 2017-09-23 18:00  遗世独立的愚公  阅读(349)  评论(0编辑  收藏  举报