python中的getter和setter你知道吗?
用java编程的小伙伴应该会比较熟悉getter和setter,其实在python中也有getter-setter,不过两者区别还是蛮大的。
对于一般的属性访问或者设置我们用属性操作符就行了,那getter与setter有什么优点呢?优点就是灵活性高,因为当你访问或者设置某个属性时能执行一段代码,进而可以增加其它业务逻辑。
python中的getter与setter是通过property类来实现的,但实际使用中我们常用装饰器来实现,即@property和 @x.setter。
为了简单说明问题,我们实现以下例子:当访问或者设置某个属性时打印出正在访问或者设置的属性名字,代码如下:class HelloDemo: def __init__(self, hello=None): self._hello = hello @property def hello(self): print("*****get hello*****") return self._hello @hello.setter def hello(self, value): print(f"*****set hello to value: {value}*****") self._hello = value demo = HelloDemo(1) print(f"=====hello is: {demo.hello}=====") demo.hello = 2 print(f"=====hello is: {demo.hello}=====")
为了便于区分打印出的内容,我们加了=====和*****标识作为区分,运行以上代码输出如下:*****get hello***** =====hello is: 1===== *****set hello to value: 2***** *****get hello***** =====hello is: 2=====
了解了上面的内容后,我们就可以通过这种方式实现一个只读属性,如下:class HelloDemo: def __init__(self, hello=None): self._hello = hello @property def hello(self): return self._hello @hello.setter def hello(self, value): raise ValueError("can"t set read only field") demo = HelloDemo(1) print(f"=====hello is: {demo.hello}=====") demo.hello = 2 print(f"=====hello is: {demo.hello}=====")
上面代码由于修改hello属性,运行时就会抛出异常,如下:=====hello is: 1===== Traceback (most recent call last): File "test.py", line 15, in demo.hello = 2 File "test.py", line 11, in hello raise ValueError("can"t set read only field")
这里我们只是说明了用法,具体的使用场景还是需要你去挖掘的,你学会了吗?如果有问题欢迎评论交流!
币圈大V集体撕逼?大V都跑路了我还不跑今年的五月是多事之秋,前有LUNA崩盘,后有IBOX卷钱跑路,本来BTC整体走弱后开始回调震荡,但是也爆仓了那么多人。今天推特上也疯了,主要因为OPT的事件,大V们下场撕逼,韭菜一
新能源汽车时代,车企是否还需要继续研发内燃机?记者观察2个月前,上汽创新研发总院副院长仇杰赶在上海封城前,连夜只身赶往广德试验基地,只为了不影响新一代蓝芯动力样机的测试。更早之前,上汽动力总成技术中心项目团队赶在上海封控前,从各处将所
从阿里辞职后不再内卷一位德国程序员的躺平之路如果你是因为幻想着新生活的美好而移民,那你将必然失望,因为生活中的盐总是咸的,哪里都一样。如果你是因为要逃离旧世界的痛苦而移民,那你几乎一定会幸福,因为那一时一地的苦难并不是普世价
北京一网吧躲避监管违规经营致多人感染,4800余人被封控管理5月24日,平安北京通州官方微博凌晨发布情况通报,针对一新冠肺炎病毒感染者曾于5月19日在通州区台湖镇易龙网吧上网,造成新冠肺炎传播的情况说明。经查,5月10日,市文化和旅游局发布
软件测试SQL面试题数据库,无外乎增删改查增insertintoA表values(value1,value2,value3)向A表中新增数据删deletefromA表(whereid1)删除A表(删除
SQLserver(oracle)语句练习指南SQLserver(oracle)语句练习指南!!!练习希望可以按顺序执行!!!建表(一)createtableTeacher(Tnointeger,Tnamechar(6),Ti
腾讯新闻再换帅!前负责人来自网易云音乐,去年8月上任经历系列裁员传闻后,腾讯迎来新的人事变动。5月23日,腾讯内部发文任命何毅进担任腾讯新闻业务负责人,兼任腾讯网总编辑,向公司副总裁曾宇汇报。原新闻负责人王诗沐将调任PCG(平台和内
热搜第一!刷爆朋友圈的广告被指抄袭!刚刚,奥迪道歉,刘德华账号删除视频5月21日是小满节气,没想到朋友圈被奥迪一则广告刷屏。这则广告,没有介绍某款车型,只是以小满为题,请刘德华讲了个人生哲理。刘德华温情脉脉的讲述,引发了网友广泛共鸣,被誉为广告营销的
现代汽车宣布在美国新投资计划,到2025年投入将超100亿美元路透社5月22日消息,现代汽车集团22日宣布将在2025年前在美国追加投资50亿美元,以加强与美国公司在先进技术方面的合作,包括机器人技术城市空中交通自动驾驶和人工智能。现代汽车上
快手辟谣5月23日晚间,有消息称,快手科技(01024。HK)董事长宿华疑因牵涉某案件,于四月底被有关部门带走配合调查。对此,快手回复观察者网称,对恶意传播网络谣言的行为,已经正式向公安机
巨星财富比尔盖茨们的能源行业创新一些世界上最著名的亿万富翁长期以来一直参与传统和创新的能源项目,但他们在多大程度上影响了该行业的看法?例如,当埃隆马斯克宣布特斯拉大规模购买比特币或批评数字货币时,人们会倾听。那么