属性包装是把类的方法包装成属性,实现python的魔法世界。
1. 限制属性,如类型、范围等
2. 只读属性
3. 不可删除属性
4. 虚拟属性 或者说 对属性进行处理
等关于属性的规则
直接上代码
class C: def __init__(self): self.__x=None def getx(self): return self.__x def setx(self,value): self.__x=value def delx(self): del self.__x x=property(getx,setx,delx,'') c=C() c.x=10 print(c.x) # 10
上面 property 函数的原型为property(fget=None,fset=None,fdel=None,doc=None),根据需要定义自己的函数即可。
上面3个方法设置了属性x的读写删
另一种写法
class C2(object): def __init__(self): self.__x=None @property def x(self): return self.__x @x.setter def x(self,value): if value>100: self.__x=100 else: self.__x=value @x.deleter def x(self): del self.__x c=C2() c.x=10 print(c.x) # 10 del c.x # print(c.x) c.x=110 # 删除属性后仍可赋值 print(c.x) # 100
属性限制在100以内。
class C2(object): def __init__(self): self.__x=None @property def x(self): return self.__x @x.setter def x(self,value): if value>100: self.__x=100 else: self.__x=value c=C2() c.x=10 print(c.x) # 10 # del c.x # AttributeError: can't delete attribute
没有deleter,属性就不可删除
三种属性操作
可读:@property
可写:@<property-name>,setter
可删:@<property-name>,deleter