這篇文章運(yùn)用簡單易懂的例子給大家介紹如何理解python的函數(shù)重寫,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
柘榮ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!在自定義類內(nèi)添加相應(yīng)的方法,讓自定義類創(chuàng)建的實(shí)例能像內(nèi)建對象一樣進(jìn)行內(nèi)建函數(shù)操作,這就是函數(shù)重寫。
對象轉(zhuǎn)字符串函數(shù):repr(obj) ,返回一個能代表此對象的表達(dá)式字符串,通常eval(repr(obj)) == obj (這個字符串通常是給python解釋執(zhí)行器運(yùn)行用的),str(obj) 通過給定的對象返回一個字符串(這個字符串通常是給人閱讀的)。
對象轉(zhuǎn)字符串函數(shù)的重寫方法:
repr(obj) 函數(shù)的重寫方法:
def __repr__(self):
str(obj) 函數(shù)的重寫方法:
def __str__(self):
說明:
1. str(obj) 函數(shù)先查找, obj.__str__()方法,調(diào)用此方法并返回結(jié)果
2. 如果沒有obj.__str__()方法時,則返回obj.__repr__()方法的結(jié)果并返回
3. 如果obj.__repr__方法不存在,則調(diào)用object類的__repr__實(shí)例方法顯示<__main__.XXXX object at 0xAABBCCDD>格式的字符串
示例:
# 此示例示意通過重寫 repr 和 str方法改變轉(zhuǎn)為字符串的規(guī)則 class MyNumber: def __init__(self, value): '構(gòu)造函數(shù),初始化MyNumber對象' self.data = value def __str__(self): '''轉(zhuǎn)換為普通人識別的字符串''' # print("__str__方法被調(diào)用!") return "自定義數(shù)字類型對象: %d" % self.data def __repr__(self): '''轉(zhuǎn)換為eval能夠識別的字符串''' return 'MyNumber(%d)' % self.data n1 = MyNumber(100) n2 = MyNumber(200) print('repr(n1) ====>', repr(n1)) print('str(n2) ====>', str(n2))
其它內(nèi)建函數(shù)的重寫方法:
__abs__ abs(obj) 函數(shù)
__len__ len(obj) 函數(shù)(必須返回整數(shù))
__reversed__ reversed(obj) 函數(shù)(必須返回可迭代對象
__round__ round(obj) 函數(shù)
示例:
# 此示例示意abs 函數(shù)的重寫 class MyInteger: def __init__(self, v): self.data = v def __repr__(self): return 'MyInteger(%d)' % self.data def __abs__(self): v = abs(self.data) return MyInteger(v) # 用v創(chuàng)建另一個MyInteger對象 def __len__(self): return 10000 I1 = MyInteger(-10) print('I1 =', I1) I2 = abs(I1) print("I2 =", I2) print('len(I2)=', len(I2)) # 10000
數(shù)值轉(zhuǎn)換函數(shù)的重寫:
__complex__ complex(obj) 函數(shù)
__int__ int(obj) 函數(shù)
__float__ float(obj) 函數(shù)
__bool__ bool(obj) 函數(shù) (見下面布爾測試函數(shù)重載)
示例:
# 此示例示意數(shù)據(jù)轉(zhuǎn)換構(gòu)造函數(shù)的重寫方法 class MyNumber: def __init__(self, value): self.data = value def __repr__(self): return 'MyNumber(%d)' % self.data def __int__(self): 'int函數(shù)的重載' return self.data n1 = MyNumber(100) x = int(n1) print(n1) print(bool(n1)) # True n2 = MyNumber(0) print(bool(n2)) # True
布爾測試函數(shù)重寫:
格式:
__bool__
作用:
用于bool(obj) 函數(shù)取值
用于if語句的真值表達(dá)式中
用于while 語句的真值表達(dá)式中
說明:
1. 當(dāng)自定義的類內(nèi)有 __bool__(self) 方法時,以此方法的返回值作為bool(obj) 的返回值
2. 當(dāng)不存在__bool__(self) 方法時,bool(x) 返回__len__(self) 方法的返回值是否為零來測試布爾值
3. 當(dāng)不存在__len__(self) 方法時,則直接返回True
示例:
# 此示例示意bool(x) 函數(shù)的重寫 class MyList: '自定義類型的列表,用來保存數(shù)據(jù),內(nèi)部用一個列表來存儲數(shù)據(jù)' def __init__(self, iterable=()): self.data = [x for x in iterable] def __repr__(self): return 'MyList(%s)' % self.data def __len__(self): '''返回長度''' print("__len__方法被調(diào)用") return len(self.data) def __bool__(self): print("__bool__方法調(diào)用") for x in self.data: if not x: return False return True # return False # <<=== 所有對象都為False myl = MyList([0, -1, 2, -3]) # myl = MyList() print(myl) print(bool(myl)) if myl: print("myl為真值") else: print('myl為假值')
關(guān)于如何理解python的函數(shù)重寫就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享題目:如何理解python的函數(shù)重寫-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/article30/ccpjso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站排名、電子商務(wù)、小程序開發(fā)、建站公司、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容