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進行修改密碼且無法...