Python property动态属性
如果不希望类的某些属性被悄悄地访问、赋值或修改,希望在访问、赋值或修改时能得到一些通知,可以使用函数property。
函数原型为:
1
| property([fget[,fset[,fdel[,doc]]]])
|
它返回新式类的一个属性,其中fget是属性被访问时执行的方法,fset是属性被赋值时执行的方法,fdel是属性被删除时执行的方法。
比如下面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class MyClass(object): def __init__(self) : self._param = None
def getParam(self): print('get param : %s ' % self._param) return self._param
def setParam(self, value): print('set param : %s' % self._param) self._param = value
def delParam(self): print('del param : %s' % self._param) del self._param
param = property(getParam, setParam, delParam)
if __name__ == '__main__': myclass = MyClass() myclass.param = 123 print('current param is : %s' % myclass.param) del myclass.param
|
接下来用property来访问类的属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class MyClass(object): def __init__(self) : self._param = None
@property def param(self): print('get param : %s ' % self._param) return self._param
@param.setter def param(self, value): print('set param : %s' % self._param) self._param = value
@param.deleter def param(self): print('del param : %s' % self._param) del self._param
if __name__ == '__main__': myclass = MyClass() myclass.param = 123 print('current param is : %s' % myclass.param) del myclass.param
|
两种方法效果一致,不过第二种方法更加的灵活、简单,在开发中建议使用。