属性包装是把类的方法包装成属性,实现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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)