class Money(object):
"""property演示"""
def __init__(self):
self.__money = None
def getmoney(self):
return self.__money
def setmoney(self,money):
self.__money = money
def delmoney(self):
del self.__money
#python有GC机制,del删除的是变量,而不是数据。
money = property(getmoney,setmoney,delmoney)
#property函数原型为property(fget=None,fset=None,fdel=None,doc=None),因此顺序不可以出错。
具体应用要看场景。
1:m.money:get方法
2:m.money=value:set方法
3:del m.money:del方法
m = Money()
print(m.money)-------None
m.money = 55
print(m.money)-----55
del m.money-----删除self.__money变量(并未在内存中删除数据,只是删除引用)
print(m.money)---出错因为变量已经删除
m是Money的实例化, m.money将触发getmoney, m.money = value将触发setmoney , del c.x触发deleter。
property相当于对一定的类方法进行了封装。
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
利用装饰器使用property。
@property:相当于fget
@x.setter:相当于fset
@x.deleter:相当于fdel