安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Python入门精华OOP创建可管理的属性(property

4月28日 辞凤阙投稿
  为类创建可管理的属性
  概述:我们可以在实例属性的获取和设定上增加一些额外的功能,比如在设定时增加类型的检查
  解决方案:
  要自定义对属性的访问,一种简单的方式是将其定义为property,增加了对属性的类型检查:classPerson:definit(self,firstname):self。firstnamefirstnamegetterpropertydeffirstname(self):returnself。firstnamefirstname。setterdeffirstname(self,value):ifnotisinstance(value,str):raiseTypeError(Expectedastring)self。firstnamevaluefirstname。deleterdeffirstname(self):raiseAttributeError(Cantdeleteattribute)
  上述代码中一共有三个相互关联的方法,三个方法必须名字相同,第一个是getter函数,将firstname设置为了property,并且附带绑定了两个可选方法setter和deleter方法,值的注意的是,如果没有设置property,是不能设置setter和deleter装饰器的。
  property的本质就是是的修饰内容更像是一个属性(而非方法),通过对属性进行赋值和del处理会自动调用装饰器setter和deleter对应装饰的方法,实例如下:对上述例子进行操作:prPerson(小白piao)调用setterpr。firstname小白piao最sao调用setterprint(pr。firstname)小白piao最sao调用getterdelpr。firstnameAttributeError:Cantdeleteattribute如果上述例子中对pr。firstname250;会抛出TypeError:Expectedastring由此,便实现了对属性类型的限定
  疑问:在init中为何是self。firstnamefirstname,而不是self。firstnamefirstname?
  原因:其实由于下方设置了装饰器,所以在构造时,构造中的赋值实际上也是调用了setter方法,定义类在前,所以后边可以直接在创建对象是调用setter,这没有问题;这么做的目的,是为了在所有地方的属性设置时,都可以进行类型检查。如果在构造函数中使用‘self。firstnamefirstname’,那么此处便不会调用setter,自然不会进行类型检查,所以这样会造成判断类型的疏忽,并不是说没有其他方法完成类型的检测。这样做在一定程度了规避了代码的大量重复。
  同样也可以对已经存在的get和set、delete定义为property。
  讨论:实际上,property的作用是将一系列的方法进行绑定,实际上可以通过调用property属性中的fget,fset,fdel方法来完成上述操作,但实际上并不会专门去调这些方法,而是通过特殊的操作诸如赋值、打印、删除都会自动调用以上三种方法。
  其实有一点很重要,只有在确实需要在访问属性时完成一些额外的工作时,才会去想到使用property。因为:一、这样写语法会对其他程序员产生困扰,代码可读性不高;二、代码的运行会变慢,实际上每个装饰器都需要额外调用函数来完成装饰动作。三、不会给设计带来真正的好处。特别是以后决定对某个属性增加额外的处理步骤是,可以再不修改已有代码的情况下将这个属性提升为一个Property。property可以用来定义需要被计算的属性:importmathclassCircle:definit(self,radius):self。radiusradiuspropertydefarea(self):returnmath。piradius2propertydefperimeter(self):return2math。piradiuscircleCircle(2)print(circle。area)print(circle。perimeter)
  property属性为我们提供了很多的使用的API,但是实际上,合理地使用它才是根本。不要一个类中都是property那会导致你的代码过度膨胀和丑陋,以至于不愿意读你写的代码,原因很简单,菜鸡看不明白。
  我的csdn:
  https:blog。csdn。netweixin43520503
  我的知乎:
  https:www。zhihu。compeoplePythonChen007
  我的头条:
  https:www。toutiao。comcusertokenMS4wLjABAAAAowATGcWpvabSvDOw3TyZJJqpxQnwrexQzfPfGc0IOn8HRUCShGxiyqBXYuKi8C1?
投诉 评论 转载

软文推广怎么提高关键词排名?你就需要先选好圈住客户的关键词,软文推广,同时发布外链。关键词定位筛选(明确目标),(1)利用百度推广的【关键词规划】,每个核心关键词都可以导出一张包含3000个长尾词的……京东物流(02618)拟透过配售代理配售1。505亿股并向京智通财经APP讯,京东物流(02618)公布,于2022年3月25日,该公司及配售代理订立配售协议,拟透过配售代理按每股配售股份20。71港元配售1。505亿股配售股份。……2399元!天玑8100OIS防抖120W快充,这次RedmK50宇宙的全部机型似乎以及到齐,K50、K50Pro、K50电竞版,都已经发布了。而K50系列搭载了联发科旗下最强的两款旗舰Soc。K50系列一共配备四个颜色:墨羽、银迹、幻……哪些家电品牌的产品值得购买?谢邀:这个还真没有一定,一般地都都是咨询使用过的好友,然后再参考家电推销店店员的意见,因为他们都比较专业,你信任他们,他们也很负专任地推荐比较适合自己的产品,还别说,我每次购进……多花270亿瑞典也要禁华为!爱立信力挺老对手,如今爱立信怎样瑞典是世界上的永久中立国,更是西方国家中第一个和我国建交的国家。两国贸易往来一直很频繁。瑞典通信网络从2G时代到5G时代的建设也一直有中国企业参与。特别是5G时代,我国华为在5……保险科技网络信息安全法规梳理与解读(二)接上篇《保险科技网络信息安全法规梳理与解读(一)》三、金融科技网络信息安全监管环境分析随着信息技术的发展与广泛应用,网络信息安全的问题逐渐显露,从1994年起,国家……现在买oppo手机好还是vivo手机好?感谢您的阅读!【现在买OPPO手机好,还是买vivo手机好?】这本身就是一个很难抉择的问题。因为,不管是vivo手机,还是OPPO手机,实际上都是目前国产四大……为什么被证明拖后腿的苹果Mini手机,仍然还会再次发布新款?iPhone12Mini系列,前几个月就被网传被苹果公司紧急停产了。作为一台5。4英寸最轻薄的5G全面屏手机,虽然确实很小巧轻薄但是因为续航能力实在太差的缘故导致了许多消……真的有不留死角的洗地机?添可芙万二代深度体验来了对于地面清洁的要求,我还是比较高的,一直在追求用最少的精力保持家里的清洁。所以我经常在不断地尝试各种地面清洁设备:吸尘器、扫地机、洗地机我都用过。所以,要聊起这个话题,自……DigiLens获三星投资Quest独占VR游戏Resist(VRPinea11月5日讯)今日重点新闻:全息波导厂商DigiLens宣布,以超过5亿美元估值获得三星领投的新一轮(D轮)融资;德国ARVR智能眼镜技术提供商OQmented……AppStore限免RandomMyRigs闪印等,共5款在今天限免的iOS限免应用中,波老师精选了以下5款限免应用。复制logo上方名字即可前往AppStore下载。如遇恢复原价,则表示限免已结束,请谨慎下载。具体下载方式:复……Python入门精华OOP创建可管理的属性(property为类创建可管理的属性概述:我们可以在实例属性的获取和设定上增加一些额外的功能,比如在设定时增加类型的检查解决方案:要自定义对属性的访问,一种简单的方式是将其定……
疑似iPhone13Pro后壳曝光更深的玫瑰金配色同级仰视的动力表现,新款CS55PLUS外观更运动,内饰表现3月24开始销售!Verizon开售摩托罗拉最新款手机Edg1分钟增加续航600公里?宁德时代宣布挺进电动汽车换电市场微信发布重要公告!发这些消息将被封号三星Note10,现在还适合入手不?联想小新Pro14高刷版即将问世核显性能暴增24谷歌在监管和开发者问题后将应用商店费用削减至15便携式小音响什么品牌的音质好呢?了解的给我说下?2021年10大风口,7个已熄火快递企业春节不打烊加大快递小哥福利保障华为9月13日新品发布会产品内容

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利