python中的屬性裝飾器

2021-09-22 22:29:28 字數 1705 閱讀 4950

class

person

:def

__init__

(self, name, age=18)

: self.name = name

self.__age = age

@property

# 屬性裝飾器,該裝飾器裝飾方法,下文中都必須用該方法

defage

(self)

:# 給你看,不希望你修改

print

('getter'

)return self.__age

@age.setter # 此裝飾器必須是age開頭,可以修改私有屬性

defage

(self, age)

: self.__age = age

print

('setter'

) @age.deleter

defage(self)

:print

('del'

)# del self.__age # 一般不需要刪除

tom = person(

'tom'

)print

(tom.age)

tom.age =

20# 不管你是私有屬性還是保護屬性,使用者只想通過普通屬性修改和訪————屬性裝飾器

print

(tom.age)

還可以不使用裝飾器,實現上述的功能:

class

person

:def

__init__

(self)

: self.name =

'tom'

self.__age =

20def

get_age

(self)

:return self.__age # 可以寫成lambda表示式

defset_age

(self, age)

:# 不能改寫為lambda表示式,lambda表示式不能有等號

self.__age = age

age =

property

(get_age, set_age)

# property是類

t = person(

)print

(t.get_age())

t.set_age(30)

print

(t.age)

t.age =

300print

(t.age)

還可以對上述的**修改為lambda表達,注意setter方法不能轉換為lambda表示式

class

person

:def

__init__

(self)

: self.name =

'tom'

self.__age =

20 age =

property

(lambda self: self.__age)

# property是類, 該方法是getter

t = person(

)print

(t.age)

# t.age = 300 # 此方法沒有setter,只有getter

python屬性裝飾器 python 類屬性裝飾器

property裝飾器 後面跟的函式名就是以後的屬性,它即是getter,這個必須有,唯讀屬性 setter裝飾器 於屬性名同名,接收兩個引數,第乙個是self,第二個是將要賦值的值,將屬性變為可寫 deleter裝飾器 可以控制屬性是否刪除 property裝飾器必須在前,setter,delet...

Python屬性的修改(裝飾器)

一 property 將乙個方法 偽裝成乙個 屬性 class person def init self,name,hight,weight self.name name self.hight hight self.weight weight property defbmi self return ...

python中的裝飾器

其實去年就開始學python了,零零散散,陸陸續續學了點,期間學習了python web開發,爬蟲系統 但是一些基礎性的知識點長時間不看了就會忘,所以寫個部落格記錄下來,忘了可以隨時檢視,不用回去看 了,希望也能幫助大家學習哈。python中的裝飾器decorator其實是乙個高階函式,它接受乙個函...