1. 程式人生 > >@property在python類中的應用

@property在python類中的應用

bject ack style 註意 log 一個 sel 變量 obj

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的位置

@property在python類中的應用