property问题:
提示:这里简述项目相关背景:
@property装饰的成员函数,只能有一个参数self;不能和别的类属性同名;并且在调用时不需要加()。
适用情况:
@property装饰适合下面这些场景:
1.只读不可修改的属性。只需要实现@property
2.输入对setter进行判断。
3.需要实时地计算属性值。
针对第三种情况,例子如下:
class OHM():
def __init__(self):
self._U=1
self._R=1
@property
def I(self):
return self._U/self._R
@property
def R(self):
return self._R
@R.setter
def R(self,r):
if r<=0:
raise ValueError('r must >0')
self._R=r
ohm=OHM()
ohm.R=1
print(ohm.I)
总结:
在对a.value赋值时,实际上调用的是被@value.setter装饰的函数,我们可以在该函数进行判断数据类型、数据范围等。至此@property装饰适合下面这些场景:
1.只读不可修改的属性。只需要实现@property
2.输入对setter进行判断。
3.需要实时地计算属性值。
作者:深度学习可好玩了
链接:https://www.zhihu.com/question/264768240/answer/2137280984
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。