城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

没想到啊,Python类还可以这样写,简洁又强大

8月28日 楚倾云投稿
  作者:麦叔
  来源:麦叔编程回顾和问题
  上一篇文章,我们讲解了NamedTuple。它可以让我们像使用对象一样使用元组,避免魔术数字,让代码更安全,更易于理解,也比普通对象更快。
  下面是其中的例子。有兴趣的麦友可以在合集中往前翻,找到上一篇文章。fromtypingimportNamedTupleclassStock(NamedTuple):name:strhigh:floatlow:floatend:floatstock1Stock(苹果,100,80,88)stock2Stock(name百度,high80,low63,end65)print(stock2。high)print(stock2。low)print(stock2。end)
  但命名元组有个问题。它的数据是不能修改的,这是元组的重要特点。
  那如果我的对象需要修改,怎么办呢?这就是本文的重点!使用dataclass
  从Python3。7开始,我们可以用很简洁的语法定义只有属性的类,也就是dataclass。从表面上看,它们非常像命名元组。
  下面是dataclass版本的Stock:fromdataclassesimportdataclassdataclassclassStock:symbol:strcurrent:floathigh:floatlow:float
  这个例子中,它的定义几乎和NamedTuple定义完全相同。
  dataclass函数是一个类装饰器,使用符号。dataclass包含状态且可以被修改,重要的是它的功能很强大。
  下面是创建Stock实例的例子:sStock(AAPL,123。52,137。98,53。15)
  一旦实例化,Stock对象可以像普通类一样使用。你可以访问和更新它的属性:sStock(symbolAAPL,current123。52,high137。98,low53。15)s。current123。52s。current122。25sStock(symbolAAPL,current122。25,high137。98,low53。15)优点多多
  我们来看看,dataclass相比普通的类有什么优点。
  下面是一个功能类似的普通类:classStockOrdinary:definit(self,name:str,current:float,high:float,low:float)None:self。namenameself。currentcurrentself。highhighself。lowlowsordStockOrdinary(AAPL,123。52,137。98,53。15)
  好处1:dataclass只需要写一次属性名,不需要在init()方法的参数和方法体中重复。
  好处2:dataclass也提供了一个比object类更加友好的字符串表达。
  好处3:dataclass也包含相等比较运算。
  下面的例子可以比较普通类和dataclass的区别:sordmain。StockOrdinaryobjectat0x7fb833c63f10sord2StockOrdinary(AAPL,123。52,137。98,53。15)sordsord2False
  普通类的默认字符串表达看起来很糟糕,而且它没有相等运算。dataclass的情况就要好多了:stock2Stock(symbolAAPL,current122。25,high137。98,low53。15)sstock2True
  好处4:你可以为属性指定默认值。
  也许股票市场闭市了,你不知道今天股票的价格是什么:dataclassclassStockDefaults:name:strcurrent:float0。0high:float0。0low:float0。0
  你可以只用股票名称来创建对象。其他的值会使用默认值:StockDefaults(GOOG)StockDefaults(nameGOOG,current0。0,high0。0,low0。0)
  好处5:你可以轻松的添加比较运算,如下所示:dataclass(orderTrue)classStockOrdered:name:strcurrent:float0。0high:float0。0low:float0。0
  你也许会问:就这么简单?
  是的!给装饰器添加orderTrue参数,就会创建所有的比较运算方法。这使得我们可以比较对象实例,也可以排序。就像下面这样:stockordered1StockOrdered(GOOG,1826。77,1847。20,1013。54)stockordered2StockOrdered(GOOG)stockordered3StockOrdered(GOOG,1728。28,high1733。18,low1666。33)stockordered1stockordered2Falsestockordered1stockordered2Truefrompprintimportpprintpprint(sorted(〔stockordered1,stockordered2,stockordered3〕))〔StockOrdered(nameGOOG,current0。0,high0。0,low0。0),StockOrdered(nameGOOG,current1728。28,high1733。18,low1666。33),StockOrdered(nameGOOG,current1826。77,high1847。2,low1013。54)〕麦叔寄语
  下次创建类的时候,试试看dataclass,写很少的代码就有很强大的功能。
  dataclass也可以像普通类一样,添加所需要的实例方法或类方法。
投诉 评论 转载

常年打鼾或是呼吸道疾病所致,5个治疗手段,或能助您一臂之力在很多人心中,睡觉时鼾声如雷往往是睡得熟、睡得香的特征,但若从医学角度来看,或许就不是那么一回事。打鼾的本质是人体的呼吸道出现堵塞,气流输送不畅,继而在咽喉与气管附近产生……不止1亿强援!曝曼联压哨签3人,5000万强援来投,2人被清媒体透露,曼联将以1亿欧元的总价签入安东尼。《每日电讯报》则透露,在签入安东尼之后,曼联还将在夏窗结束前签入3名球员。著名记者罗马诺透露,曼联已经与阿贾克斯达成了协议,安……身材发福的中年妈妈辈,学会这样打扮,让你得体显瘦又提亮气色我们普通大众女性们,虽然说不像明星、潮人们那么的刻意强调自己要穿得多么时尚、上档次,但是平日里也是不能过于忽视自己的衣着打扮,毕竟是直接关系到个人形象的问题,所以中年妈妈辈们中……没想到啊,Python类还可以这样写,简洁又强大作者:麦叔来源:麦叔编程回顾和问题上一篇文章,我们讲解了NamedTuple。它可以让我们像使用对象一样使用元组,避免魔术数字,让代码更安全,更易于理解,也比普通对……广州队2人恶意犯规1人被开除,1人仅得黄牌,裁判放纵或遭处罚刚结束的一场第13轮比赛的补赛中,大连人与广州队的比赛格外引人关注。这场比赛广州队缺少核心韦世豪并且近半场都少打一人的情况下,00逼平了人员齐整的大连人。这场比赛两队表现都不错……小米11提前退休,已经入手小米12SUItra,说说真实体验本来去年首销期间入手了小米11,希望可以用个三四年时间,但说实话开箱用了一个小时我就后悔了,无奈已经开封和激活,所以无法退货。要问我为什么后悔,核心原因就是太烫了,至于网上提到……熊孩子管不住,是家长的错吗?这个社会怎么越来越不能包容人了?最近网络上关于熊孩子闹腾,然后家长和乘客冲突的情况真是越来越多,感觉很多人都义愤填膺,都在谴责熊孩子和家长,其实大可不必,我们这个社会应该多点忍耐心,毕竟,熊孩子的父母也不容易……关于孩子要玩手机,这个事情该如何处理现在手机是我们每个人必不可少的重要生活工具,不仅大人手机不离手,更多的孩子也是抱着手机刷视频,打游戏。孩子的自制能力远没有承认的强,在面对孩子要玩手机的这一情况,作为家长的我们……徐杰进入12人大名单,是因为郭艾伦因伤缺阵,但还有一个原因徐杰进入12人大名单,是因为郭艾伦因伤缺阵,但还有一个原因记得在和哈萨克斯坦比赛之前,杜锋公开透露说,郭艾伦大腿后侧肌肉拉伤,很多人以为,这种情况之下,杜锋大概率会让郭艾……赤月龙城自由之刃星斗森林介绍大家好,今天和大家聊一款新传奇自由之刃,每个游戏都有可以玩的副本,今天为大家介绍一个副本星斗森林作为自由之刃100级的玩家必备的副本,到达100级及100级以上的玩家可通……宇宙是无限大的吗?如果是这样,就会产生一个让人疯狂的事实根据现代主流科学理论,我们的宇宙诞生于138亿年前的大爆炸,在大爆炸瞬间拥有难以置信的高温高压,所有的能量在一瞬间释放出来,之后温度慢慢冷却,逐渐演化成如今我们看到的宇宙。……徒弟丫蛋1嫁师兄2嫁师弟,生1女3胎流产,网友赵本山恨铁不成09年春晚,赵本山带着自己的小品《不差钱》登上春晚舞台,给全国观众带去了很多欢声笑语。这部小品即使是现在很多人都能来上两句,小沈阳和丫蛋因为这个小品,火出了圈。而小沈阳虽……
乐视能在电视机行业复制小米的成功吗林书豪结束CBA生涯,他在CBA场均多少分?一共赚到多少钱?小熊过桥看图写话2023新能补贴取消,但纯电在一线城市不好卖?新鲜早科技丨苹果公司正式关停天气应用DarkSky去哪儿回应清朝的大内侍卫有什么不同大内侍卫需要遵守的六大禁于红人店不止拼颜值被央视警告后仍不知悔改,还一脸委屈,潘长江还有救吗?风物淮南第一州,与安徽天长交界,因产化纤而驰名东北的6大骨灰级小吃,全吃过的,是正宗东北人魔域手游2中的天地一新我爱我家

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找