引數檢查 property

2022-06-25 13:54:09 字數 1396 閱讀 4800

繫結屬性時,如果直接把屬性暴露出去,雖然寫起來很簡單,但無法對引數進行檢查,導致屬性被隨便修改

因此,可以通過在類內定義get()獲取屬性值,定義set()對屬性值進行設定並對設定值進行檢查

但通過定義get()和set()會讓程式顯得複雜,沒有直接用屬性這麼直接簡單

python內建的@property裝飾器就是用來負責把乙個方法變成屬性呼叫的,它可以通過更加簡單的方式來實現上述功能而無需自定義get()和set()

@property廣泛應用在類的定義中,可以讓呼叫者寫出簡短的**,同時保證對引數進行必要的檢查,這樣,程式執行時就減少了出錯的可能性

class

student(object):

@property

defscore(self):

return

self._score

@score.setter

defscore(self, value):

ifnot

isinstance(value, int):

raise valueerror('

score must be an integer!')

if value < 0 or value > 100:

raise valueerror('

score must between 0 ~ 100!')

self._score =value

@property

defbirth(self):

return

self._birth

@birth.setter

def birth(self, value): #

birth是可讀寫屬性,因為它有setter

self._birth =value

#還可以定義唯讀屬性,只定義getter方法,不定義setter方法就是乙個唯讀屬性

@property

def age(self): #

age就是乙個唯讀屬性,因為它沒有setter

return 2019 -self._birth

s =student()

s.score = 60 #

ok,實際轉化為s.set_score(60)

print(s.score) #

輸出:60,實際轉化為s.get_score()

s.score = 9999 #

報預定錯誤

s.birth = 1988 #

ok,實際轉化為s.set_birth(1988)

print(s.birth) #

輸出:1988,實際轉化為s.get_birth()

print(s.age) #

輸出:31,實際轉化為s.get_age()

property屬性引數

1.讀寫屬性 預設是readwrite,會生成getter和setter方法 如果是readonly表示只會生成getter方法 2.setter處理 預設是assign 賦值 因此基本資料型別不需要加這個引數。因為在setter方法裡,我們經常要將乙個物件賦值給類的成員屬性,這個時候根據記憶體管理...

property引數講解

一 property作用 1 自動生成私有屬性 2 自動生成這個屬性的getter和setter方法的宣告 3 自動生成這個屬性的getter和setter方法的實現 注意 生成的setter方法的實現中,無論是什麼型別,都是直接賦值 二 property引數 1 property是可以帶引數的 p...

property引數的作用

property是乙個屬性訪問宣告,擴號內支援以下幾個屬性 1,getter gettername,setter settername,設定setter與getter的方法名 2,readwrite,readonly,設定可供訪問級別 2,assign,setter方法直接賦值,不進行任何retai...