1. 程式人生 > >Python:使用property裝飾器將方法轉為屬性

Python:使用property裝飾器將方法轉為屬性

       最近看了一下python,學習了點基礎。本文就是在學習python過程中的產物之一。一來作為筆記方便日後參閱,二來寫出來分享給python初學者。由於筆者的工作語言是java,因此可能回經常將python於java比較。

一、property用途

有時候在寫程式中某些變數是由特殊的範圍值的,就好像people中的age屬性:年齡一樣,總不可能是負數的吧。那麼就要對該變數進行檢查。一般的做法就是在使用該變數之前檢查一下是否在合理範圍內,如果不在合理的範圍內,就給出相應的提示,或丟擲相關的錯誤。而另一種是在給該變數賦值之前進行相關檢查,如果在合理範圍內就對該變數賦值。 以上是兩種常見的檢查,今天要說的不是以上兩種檢查之一,而是賦值的時候檢查。這樣的寫法很簡單,無非是使用該變數的setter對變數賦值,相關的檢查邏輯在settter。這樣的做法不錯,但是賦值過於麻煩,總要以這樣的方式進行賦值:
people.setAge(60)
遠沒有以下這種賦值方法來得方便:
people.age=60

這種賦值不但方便而且簡單明瞭。 但是說好的賦值的時候檢查就做不到了,有沒有一種方法可以既檢查,賦值的時候又簡單呢? 在python中有一種裝飾器可以做到這種效果,該裝飾器就是:property

二、用法

property的用法很簡單,也是基於getter和setter。 property可以將getter和setter轉化成屬性。
class People(object):
    @property
    def getAge(self):
        return self.age
    @age.setter
    def setAge(self, age):
        if age<0:
            raise ValueError('age error!')
        else:
        self.age = age

在getter上加上property裝飾器之後就可以直接以這種方式people.age獲取age的值,settler的做法差不多隻是裝飾器的寫法不一致而已將【變數名】.setter寫在setter上面即可完成,從此設定age不用使用setter那麼麻煩了,可以直接使用people.age=60這樣的寫法啦