python3中property使用方法詳解
本文實(shí)例為大家分享了python3中的property使用方法,供大家參考,具體內(nèi)容如下
property屬性
定義
一個(gè)可以使實(shí)例方法用起來像實(shí)例屬性一樣的特殊關(guān)鍵字,可以對(duì)應(yīng)于某個(gè)方法,通過使用property屬性,能夠簡(jiǎn)化調(diào)用者在獲取數(shù)據(jù)的流程(使代碼更加簡(jiǎn)明)。
property屬性的定義和調(diào)用要注意以下幾點(diǎn):
調(diào)用時(shí),無需括號(hào),加上就錯(cuò)了;并且僅有一個(gè)self參數(shù)
實(shí)現(xiàn)property屬性的兩種方式
裝飾器
新式類中的屬性有三種訪問方式,并分別對(duì)應(yīng)了三個(gè)被
- @property對(duì)應(yīng)讀取
- @方法名.setter修改
- @方法名.deleter刪除屬性
class Goods:
def __init__(self):
self.age = 18
@property
def price(self): # 讀取
return self.age
# 方法名.setter
@price.setter # 設(shè)置,僅可接收除self外的一個(gè)參數(shù)
def price(self, value):
self.age = value
# 方法名.deleter
@price.deleter # 刪除
def price(self):
del self.age
# ############### 調(diào)用 ###############
obj = Goods() # 實(shí)例化對(duì)象
obj.age # 直接獲取 age屬性值
obj.age= 123 # 修改age的值
del obj.age # 刪除age屬性的值
類屬性
當(dāng)使用類屬性的方式創(chuàng)建property屬性時(shí),property()方法有四個(gè)參數(shù)
- 第一個(gè)參數(shù)是方法名,調(diào)用 對(duì)象.屬性 時(shí)自動(dòng)觸發(fā)執(zhí)行方法
- 第二個(gè)參數(shù)是方法名,調(diào)用 對(duì)象.屬性 = XXX 時(shí)自動(dòng)觸發(fā)執(zhí)行方法
- 第三個(gè)參數(shù)是方法名,調(diào)用 del 對(duì)象.屬性 時(shí)自動(dòng)觸發(fā)執(zhí)行方法
- 第四個(gè)參數(shù)是字符串,調(diào)用 對(duì)象.屬性.doc ,此參數(shù)是該屬性的描述信息
class Goods(object):
def __init__(self):
self.price = 100 # 原價(jià)
self.discount = 0.8 # 折扣
def get_price(self):
# 實(shí)際價(jià)格 = 原價(jià) * 折扣
new_price = self.price * self.discount
return new_price
def set_price(self, value):
self.price = value
def del_price(self):
del self.price
# 獲取 設(shè)置 刪除 描述文檔
PRICE = property(get_price, set_price, del_price, '價(jià)格屬性描述...')
# 使用此方式設(shè)置
obj = Goods()
obj.PRICE # 獲取商品價(jià)格
obj.PRICE = 200 # 修改商品原價(jià)
del obj.PRICE # 刪除商品原價(jià)
使用property取代getter和setter方法
使用@property裝飾器改進(jìn)私有屬性的get和set方法
class Money(object):
def __init__(self):
self.__money = 0
# 使用裝飾器對(duì)money進(jìn)行裝飾,那么會(huì)自動(dòng)添加一個(gè)叫money的屬性,當(dāng)調(diào)用獲取money的值時(shí),調(diào)用裝飾的方法
@property
def money(self):
return self.__money
# 使用裝飾器對(duì)money進(jìn)行裝飾,當(dāng)對(duì)money設(shè)置值時(shí),調(diào)用裝飾的方法
@money.setter
def money(self, value):
if isinstance(value, int):
self.__money = value
else:
print("error:不是整型數(shù)字")
a = Money()
a.money = 100
print(a.money)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)戰(zhàn)之PyQt5實(shí)現(xiàn)漫畫臉
本文詳細(xì)講解了python實(shí)戰(zhàn)之PyQt5實(shí)現(xiàn)漫畫臉的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
詳解DBSCAN算法原理及其Python實(shí)現(xiàn)
DBSCAN,即Density-Based Spatial Clustering of Applications with Noise,基于密度的噪聲應(yīng)用空間聚類,本文將詳細(xì)介紹DBSCAN算法的原理及其Python實(shí)現(xiàn),需要的可以參考下2023-12-12
python實(shí)現(xiàn)rest請(qǐng)求api示例
這篇文章主要介紹了python實(shí)現(xiàn)rest請(qǐng)求api示例,需要的朋友可以參考下2014-04-04
python編程使用協(xié)程并發(fā)的優(yōu)缺點(diǎn)
協(xié)程是一種用戶態(tài)的輕量級(jí)線程,又稱微線程。這篇文章主要介紹了python編程使用協(xié)程并發(fā)的優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧2018-09-09

