Python property、setter、deleter
(相关资料图)
面向对象封装特点之一就是通过实现好的方法来访问,限制对数据的不合理访问,把对象状态私有化,仅供类的内部进行操作
下方示例,Test方法的number属性类实例的时候传递1,number是一个公开属性,可以在外部任意修改、访问,没有对属性进行进行约束
class Test: def __init__(self,number) self.number = numberif __name__ == "__main__": test = Test(1) print(test.number) test.number = -100 print(test.number)
@property调用被装饰方法的时候不+括号方法定义有且只能有self一个参数@property的作用是声明一个只读属性,在函数上装饰,像调用属性一样的去调用这个函数,对象.属性的方式操作,内部可以做一些逻辑判断,需要注意的两点
class Test: def __init__(self, number): self.__number = number @property # 声明number属性,只读 def number(self): if self.__number >= 100: raise ValueError("范围超出100") return self.__numberif __name__ == "__main__": test = Test(3) print(test.number) # 3
@func.settersetter就是给@property声明的属性设置值,func是当前函数的名字,但是当前函数setter,又需要指向property,所以property声明的函数名 和 setter的函数名需要一致,根据赋值操作还是获取操作决定走哪个方法
class Test: def __init__(self,number): self.__number = None @property # 声明属性 def number(self): if self.__number >= 100: raise ValueError("范围超出100") return self.__number @number.setter # 设置属性 def number(self,number) self.__number = number """声明和设置属性的函数名字可以完全自定义,但是要与初始化变量名做区分,如果都一样的话会出现同名递归报错"""test = Test()test.number = 30 # setter 设置值print(test.number) #property声明的number获取值
@func.deleterdeleter装饰器见名知意,就是属性的删除操作,实际开发过程中,具体实现的逻辑由我们自己实现,当del属性的时候,会触发该装饰器函数内的流程,但是是否是删除操作,根据业务场景来实现
class Test: def __init__(self): self.__number = None @property def number(self): return self.__number @number.setter def number(self, number): self.__number = number @number.deleter def number(self): self.__number = 100if __name__ == "__main__": test = Test() test.number = 10 print(test.number) # 10 del test.number print(test.number) # 100"""该示例中,deleter的方法中将number设置为了100,del test.number后触发该流程,所以在deleter做什么事情,由自己决定,可以是 del self.__number 也可有是self.__number=None等等,del只是触发条件"""
property(fget,fset)除了上面使用装饰器声明,还可有在类中设置属性指向property()对象,设置set和get的方法以及del方法
class Test: def __init__(self): self.__number = None def get_number(self): return self.__number def set_number(self, number): self.__number = number def del_number(self): del self.__number # 设置number属性指向property对象 # fget 获取的时候触发的方法 # fset 赋值的时候触发的方法 # fdel 删除的时候触发的方法 number = property(fget=get_number, fset=set_number, fdel=del_number)if __name__ == "__main__": test = Test() test.number = 100 print(test.number) del test.number
关键词:
上一篇:清远库存日化原料回收报价
下一篇:最后一页
精心推荐
- Python property、setter、deleter
- 清远库存日化原料回收报价
- 10转5股什么意思
- 甘肃科技集团实现一季度“开门红”_通讯
- 浙江省人口总量前20区县是哪些?2022年度有多少增长?来看数据!-天天日报
- 3月CPI同比上涨0.7%:猪肉涨9.6%,鲜菜降11.1%-快播
- 环球热讯:拳打队友的人,活该被全NBA都嫌弃
- “环保果实”进校园 全球快消息
- 金字塔内温为20摄氏度,难道是想和地球一样恒温?
- 《欢乐颂4》:女性题材红利已耗尽,打破续集魔咒有点难
- 天天最新:显盈科技:2022年归母净利润同比增36.25%,拟10转8派2元
- 便民丨赏花还能扮靓家居生活,来花漾生活集市兜兜?-每日热点
- 热捧人工智能需防泡沫|今日播报
- 世界观热点:23湖南债32票面利率为2.9600%
-
【41】同流合污•其五!前情提要:失去爱与情感的人,可怜而又可悲的人,她誓要将自己的孤独与痛苦,散向地球的每一块土壤。夺天工,在对恋人
-
1、1 9本视频由WIN10系统的笔记本电脑演示。右键单击“这台电脑”2、2 9点击“管理”3、3 9点击“设备管理器”
-
近日,国际可再生能源署(IRENA)发布《2023年可再生能源装机容量统计》报告显示,到2022年底,全球可再生能源发电总装机容量达33 72亿千瓦,
-
小米于米粉节期间举办了盛大的米粉见面会,许多小米粉丝追问小米13+Ultra发布时间。小米13+Ultra将在本月正式亮相,并且预计本周会公布发布时
-
原标题:聚焦高校毕业生、农民工、就业困难人员等重点群体——(引题) 广西实施重点群体创业推进行动(主题)人民日报南宁4月9日电 (记者
X 关闭
X 关闭
产业
-
不用跑北京 在家门口也能挂上顶...
日前,我省首个神经疾病会诊中心——首都医科大学宣武医院河北医院...
-
“十四五”期间 河北省将优化快...
从省邮政管理局获悉,十四五期间,我省将优化快递空间布局,着力构...
-
张家口市宣化区:光伏发电站赋能...
3月19日拍摄的张家口市宣化区春光乡曹庄子村光伏发电站。张家口市宣...
-
“张同学”商标被多方抢注 涉及...
“张同学”商标被多方抢注,官方曾点名批评恶意抢注“丁真” ...
-
山东济南“防诈奶奶团”花式反诈...
中新网济南12月15日电 (李明芮)“老有所为 无私奉献 志愿服...
-
广州新增1例境外输入关联无症状...
广州卫健委今日通报,2021年12月15日,在对入境转运专班工作人...
-
西安报告初筛阳性病例转为确诊病例
12月15日10:20,经陕西西安市级专家组会诊,西安市报告新冠病毒...
-
广东东莞新增本土确诊病例2例 ...
(抗击新冠肺炎)广东东莞新增本土确诊病例2例 全市全员核酸检测...
-
中缅边境临沧:民警深夜出击捣毁...
中新网临沧12月15日电 (胡波 邱珺珲)记者15日从云南临沧边境...
-
“土家鼓王”彭承金:致力传承土...
中新网恩施12月15日电 题:“土家鼓王”彭承金:致力传承土家...