這只是一個(gè)小技巧仅孩,用@property裝飾器為類添加屬性設(shè)定約束和只讀屬性利术。
直接看代碼:
class man(object):
@property
def birth(self):
return self._birth
@birth.setter
def birth(self, value):
if value<1900 or value >2018:
raise ValueError('超出范圍')
else:
self._birth = value
@property
def age(self):
return 2018 - self._birth
m = man()
m.birth = 200
m.age
運(yùn)行將拋出異常ValueError,因?yàn)閎irth.setter被裝飾了邦鲫,限定了設(shè)置m.birth的取值范圍。
如果改為m.birth=2000
,那么就能正常輸出18杈抢。但如果直接修改m.age=100
就會(huì)拋出異常AttributeError: can't set attribute
,因?yàn)檫@個(gè)age屬性也被裝飾了仑性,并沒(méi)有self._age=value
這樣的語(yǔ)句供設(shè)置惶楼。
@property
def birth(self):
這兩行其實(shí)意思就是birth=property(birth)
對(duì)函數(shù)進(jìn)行包裹裝飾。
每個(gè)人的智能新時(shí)代
如果您發(fā)現(xiàn)文章錯(cuò)誤歼捐,請(qǐng)不吝留言指正;
如果您覺(jué)得有用晨汹,請(qǐng)點(diǎn)喜歡豹储;
如果您覺(jué)得很有用,歡迎轉(zhuǎn)載~
END