描述器 property的兩種方法 裝飾器和類屬性

2021-10-24 13:46:25 字數 2176 閱讀 7442

property分為兩種方式

裝飾器即:在⽅法上應⽤裝飾器,被裝飾的方法擁有setter,deleter屬性

使用裝飾方法的屬性:方法.setter、方法.deleter 裝飾被裝飾的方法名

三個裝飾器:@property、@方法.setter、@方法.deleter裝飾的方法名一樣,實現功能不一樣

類屬性即:在類中定義值為property物件的類屬性

1.新式類,具有三種@property裝飾器:

class

goods

: @property

defprice

(self)

:print

("@property"

) @price.setter

defprice

(self,value)

:print

("@price.setter"

) @price.deleter

defprice

(self)

:print

("@price.deleter"

)obj = goods(

)obj.price#自動執行 @property 修飾的 price 方法並獲取方法

obj.price =

123#自動執行@price.setter 修飾的price方法 並將123賦值給引數

del obj.price#自動執行 @price.deleter 修飾的price方法

注意

經典類中的屬性只有⼀種訪問⽅式,其對應被 @property 修飾的⽅法

新式類中的屬性有三種訪問⽅式,並分別對應了三個被@property、@⽅

法名.setter、@⽅法名.deleter修飾的⽅法

proper裝飾器的裝飾的方法名是一樣的

2.類屬性⽅式,建立值為property物件的類屬性

當使⽤類屬性的⽅式建立property屬性時, 經典類 和 新式類 ⽆區別

property類屬性引用的方法名不一樣

class

foo(

object):

defget_bar

(self)

:print

("getter..."

)return

"laowang"

defset_bar

(self,value)

:print

("setter..."

)return

"set value"

+ value

defdel_bar

(self)

:print

("deleter..."

)return

"laowang"

bar =

property

(get_bar,set_bar,del_bar,

"description..."

)

obj = foo(

)obj.bar#自動呼叫第乙個引數中定義的方法:get\_bar

obj.bar =

"alex"

#自動跳用第二個引數中定義的方法:set_bar方法 並將"alex"當做引數傳入

desc = foo.bar.__doc__#自動獲取第四個引數中設定的值:descrepation

print

(desc)

del obj.bar#自動呼叫第三個引數中定義的方法:del_bar方法

property⽅法中有個四個引數

第⼀個引數是⽅法名,調⽤ 物件.屬性 時⾃動觸發執⾏⽅法

第⼆個引數是⽅法名,調⽤ 物件.屬性 = *** 時⾃動觸發執⾏⽅法

第三個引數是⽅法名,調⽤ del 物件.屬性 時⾃動觸發執⾏⽅法

第四個引數是字串,調⽤ 物件.屬性.doc,此引數是該屬性的描述資訊

綜上所述:

定義property屬性共有兩種⽅式,分別是【裝飾器】和【類屬性】,⽽【裝飾器】⽅式針對經典類和新式類⼜有所不同。

通過使⽤property屬性,能夠簡化調⽤者在獲取資料的流程

python 屬性property的兩種實現

class money object def init self self.money 0def get money self return self.money defset money self,value if isinstance value,int self.money value els...

XML的兩種模式描述

在xml使用過程中,往往需要對xml的有效性進行驗證。只要不違反xml格式良好的規則,就可以自由選取標記的名字,用自己習慣的方式描述事物。這就意味著用xml描述相同的事物時,不同的編寫者可能寫出含有不同標記名 採用不同結構的xml文件,這對於資料的統一處理極為不利。所以需要一種機制指定應該如何構造描...

Redhat nis client兩種接入方式

redhat nis client兩種接入方式 在redhat上nis client有兩種方式接入nis伺服器 etc nsswitch.conf和system config authentication 通過 etc nsswitch.conf的方式使用者只能通過yppasswd進行修改密碼且無法...