0%

Python property函数

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

两种方法效果一致,不过第二种方法更加的灵活、简单,在开发中建议使用。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道