「python」property 的詳細使用方法

property 有兩種使用方式

  • 裝飾器:在方法上應用裝飾器
  • 類屬性: 在類中定義值為 property 對象的類屬性
  • 裝飾器方式
  • 官方幫助文檔
property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
Decorators make defining new properties or modifying existing ones easy:

class C(object):
@property
def x(self):
"I am the 'x' property."
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x

注意:三個處理 _x 屬性的方法名要相同(參數不同)

通過一個例子來更好的理解裝飾器方式

class Money:
def __init__(self):
self._money = 0

@property
def money(self):
return self._money

@money.setter

def money(self, value):
self._money = value

@money.deleter
def money(self):
print('我沒錢了')
del self._money

dollar = Money()
m = dollar.money # 獲取,dollar.money 在調用時沒有()
print(m)
dollar.money = 10000000 # 修改
m = dollar.money
print(m)
del dollar.money # 刪除

打印結果為

0
10000000
我沒錢了

該類的屬性有三種訪問方式,並分別對應三個被 @property、@方法名.setter、@方法名.deleter 修飾的方法,這三個方法對同一個屬性:獲取,修改,刪除

類屬性方式

官方幫助文檔

class C(object):
def getx(self): return self._x
def setx(self, value): self._x = value
def delx(self): del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")

通過一個例子來更好的理解類屬性方式

class Money:
def __init__(self):
self._money = 0

def get_money(self):
return self._money

def setter_money(self, value):
self._money = value

def deleter_money(self):
print('我沒錢了')
del self._money

money = property(get_money, setter_money, deleter_money)

dollar = Money()
m = dollar.money
print(m)
dollar.money = 100000000
m = dollar.money
print(m)
del dollar.money

打印結果

0
10000000
我沒錢了

property 到底有什麼作用呢?

當我們需要修改類裡面的方法名時,例如將 get_money 改為 get 等,如果使用 property()則不需要改變用戶調研的接口,用戶仍然只需要去操作 money 屬性即可


分享到:


相關文章: