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其實是乙個高階函式,它接受乙個函...