python的attr可看作是一個(gè)類裝飾器但又不僅僅是簡單的裝飾器,他使得我們編寫類變得更加簡單輕松。下面先通過一個(gè)簡單的例子來見識(shí)下attr的強(qiáng)大吧。
現(xiàn)在我們需要編寫一個(gè)類,有a,b,c兩個(gè)屬性,正常的寫法:
classA(object):
def__init__(self,a,b,c):
self.a=aself.b=bself.c=c
看起來也沒那么復(fù)雜嘛。好了,現(xiàn)在領(lǐng)導(dǎo)說類的打印輸出不好看,又不能進(jìn)行比較,行吧,有需求就加吧。
fromfunctoolsimporttotal_ordering@total_orderingclassA(object):
def__init__(self,a,b,c):
self.a=aself.b=bdef__repr__(self):
return"ArtisanalClass(a={},b={})".format(self.a,self.b)
def__eq__(self,other):
ifnotisinstance(other,self.__class__):
returnNotImplemented
return(self.a,self.b)==(other.a,other.b)
def__lt__(self,other):
ifnotisinstance(other,self.__class__):
returnNotImplemented
return(self.a,self.b)<(other.a,other.b)
雖然看起來有點(diǎn)復(fù)雜,但是借助total_ordering,也算是以盡量少的代碼實(shí)現(xiàn)了所需功能了吧。
但是,有沒有更簡潔的方式呢?讓我們來看看借助于attr的實(shí)現(xiàn):
importattr
@attr.sclassA(object):
a=attr.ib()
b=attr.ib()
以上內(nèi)容為大家介紹了python培訓(xùn)之a(chǎn)ttrs表示什么,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。