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 屬性即可
閱讀更多 waspvae 的文章