Python @property 用法
已经在Animal类中定义2个属性name和_speed:
class Animal():
cprop = "我是类上的属性cprop"
def __init__(self,name,speed):
self.name = name # 动物名字
self._speed = speed # 动物行走或飞行速度
像这种方法定义的属性,外界可以对属性赋任意值,这不是合理的。如下speed参数被赋值为负值,这肯定不合理:
jiafeimao = Cat('jiafeimao',-2,'gray','CatGenre')
所以一种解决方法便是使用@property,写法也很简洁:
# 读
@property
def _speed(self):
return self.__speed
# 写
@_speed.setter
def _speed(self,val):
if val < 0:
raise ValueError('speed value is negative')
self.__speed = val
Cat('jiafeimao',-2,'gray','CatGenre')执行时,会进入到@_speed.setter,检查不满足,抛出取值异常。
@property 就是给 _speed 函数增加功能后返回一个更强大的函数,
@属性.setter 也是一个函数,装饰后控制着属性的写入操作。