溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中property屬性實(shí)例解析

發(fā)布時間:2020-08-20 19:17:20 來源:腳本之家 閱讀:140 作者:ITxiaoke 欄目:開發(fā)技術(shù)

本文主要講述的是對Python中property屬性(特性)的理解,具體如下。

定義及作用:

在property類中,有三個成員方法和三個裝飾器函數(shù)。
三個成員方法分別是:fget、fset、fdel,它們分別用來管理屬性訪問;
三個裝飾器函數(shù)分別是:getter、setter、deleter,它們分別用來把三個同名的類方法裝飾成property。
fget方法用來管理類實(shí)例屬性的獲取,fset方法用來管理類實(shí)例屬性的賦值,fdel方法用來管理類實(shí)例屬性的刪除;
getter裝飾器把一個自定義類方法裝飾成fget操作,setter裝飾器把一個自定義類方法裝飾成fset操作,deleter裝飾器把一個自定義類方法裝飾成fdel操作。
只要在獲取自定義類實(shí)例的屬性時就會自動調(diào)用fget成員方法,給自定義類實(shí)例的屬性賦值時就會自動調(diào)用fset成員方法,在刪除自定義類實(shí)例的屬性時就會自動調(diào)用fdel成員方法。

下面從三個方面加以說明

Num01–>原始的getter和setter方法,獲取私有屬性值

# 定義一個錢的類
class Money(object):
  def __init__(self):
    self._money = 0

  def getmoney(self):
    return self._money

  def setmoney(self, value):
    if isinstance(value, int):
      self._money = value
    else:
      print("error:不是整型數(shù)字")


money = Money()
print(money.getmoney())
# 結(jié)果是:0
print("====修改錢的大小值====")
money.setmoney(100)
print(money.getmoney())
# 結(jié)果是:100

Num02–>使用property升級getter和setter方法

# 定義一個錢的類
class Money(object):
  def __init__(self):
    self._money = 0

  def getmoney(self):
    return self._money

  def setmoney(self, value):
    if isinstance(value, int):
      self._money = value
    else:
      print("error:不是整型數(shù)字")

  money = property(getmoney, setmoney)

money = Money()
print(money.getmoney())
# 結(jié)果是:0
print("====修改錢的大小值====")
money.setmoney(100)
print(money.getmoney())
# 結(jié)果是:100

#最后特別需要注意一點(diǎn):實(shí)際錢的值是存在私有便令__money中。而屬性money是一個property對象,
是用來為這個私有變量__money提供接口的。

#如果二者的名字相同,那么就會出現(xiàn)遞歸調(diào)用,最終報錯。

Num03–>使用property取代getter和setter

@property成為屬性函數(shù),可以對屬性賦值時做必要的檢查,并保證代碼的清晰短小

# 定義一個錢的類
class Money(object):
  def __init__(self):
    self._money = 0

  @property
  # 注意使用@property裝飾器對money函數(shù)進(jìn)行裝飾,就會自動生成一個money屬性,
當(dāng)調(diào)用獲取money的值時,就調(diào)用該函數(shù)
  def money(self):
    return self._money

  @money.setter
  # 使用生成的money屬性,調(diào)用@money.setter裝飾器,設(shè)置money的值
  def money(self, value):
    if isinstance(value, int):
      self._money = value
    else:
      print("error:不是整型數(shù)字")

aa = Money()
print(aa.money)
# 結(jié)果是:0
print("====修改錢的大小值====")
aa.money = 100
print(aa.money)
# 結(jié)果是:100

總結(jié)

以上就是本文關(guān)于Python中property屬性實(shí)例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI