這篇文章運用簡單易懂的例子給大家介紹如何理解python的函數重寫,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
在自定義類內添加相應的方法,讓自定義類創建的實例能像內建對象一樣進行內建函數操作,這就是函數重寫。
對象轉字符串函數:repr(obj) ,返回一個能代表此對象的表達式字符串,通常eval(repr(obj)) == obj (這個字符串通常是給python解釋執行器運行用的),str(obj) 通過給定的對象返回一個字符串(這個字符串通常是給人閱讀的)。
對象轉字符串函數的重寫方法:
repr(obj) 函數的重寫方法:
def __repr__(self):
str(obj) 函數的重寫方法:
def __str__(self):
說明:
1. str(obj) 函數先查找, obj.__str__()方法,調用此方法并返回結果
2. 如果沒有obj.__str__()方法時,則返回obj.__repr__()方法的結果并返回
3. 如果obj.__repr__方法不存在,則調用object類的__repr__實例方法顯示<__main__.XXXX object at 0xAABBCCDD>格式的字符串
示例:
# 此示例示意通過重寫 repr 和 str方法改變轉為字符串的規則
class MyNumber:
def __init__(self, value):
'構造函數,初始化MyNumber對象'
self.data = value
def __str__(self):
'''轉換為普通人識別的字符串'''
# print("__str__方法被調用!")
return "自定義數字類型對象: %d" % self.data
def __repr__(self):
'''轉換為eval能夠識別的字符串'''
return 'MyNumber(%d)' % self.data
n1 = MyNumber(100)
n2 = MyNumber(200)
print('repr(n1) ====>', repr(n1))
print('str(n2) ====>', str(n2))其它內建函數的重寫方法:
__abs__ abs(obj) 函數
__len__ len(obj) 函數(必須返回整數)
__reversed__ reversed(obj) 函數(必須返回可迭代對象
__round__ round(obj) 函數
示例:
# 此示例示意abs 函數的重寫
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創建另一個MyInteger對象
def __len__(self):
return 10000
I1 = MyInteger(-10)
print('I1 =', I1)
I2 = abs(I1)
print("I2 =", I2)
print('len(I2)=', len(I2)) # 10000數值轉換函數的重寫:
__complex__ complex(obj) 函數
__int__ int(obj) 函數
__float__ float(obj) 函數
__bool__ bool(obj) 函數 (見下面布爾測試函數重載)
示例:
# 此示例示意數據轉換構造函數的重寫方法
class MyNumber:
def __init__(self, value):
self.data = value
def __repr__(self):
return 'MyNumber(%d)' % self.data
def __int__(self):
'int函數的重載'
return self.data
n1 = MyNumber(100)
x = int(n1)
print(n1)
print(bool(n1)) # True
n2 = MyNumber(0)
print(bool(n2)) # True布爾測試函數重寫:
格式:
__bool__
作用:
用于bool(obj) 函數取值
用于if語句的真值表達式中
用于while 語句的真值表達式中
說明:
1. 當自定義的類內有 __bool__(self) 方法時,以此方法的返回值作為bool(obj) 的返回值
2. 當不存在__bool__(self) 方法時,bool(x) 返回__len__(self) 方法的返回值是否為零來測試布爾值
3. 當不存在__len__(self) 方法時,則直接返回True
示例:
# 此示例示意bool(x) 函數的重寫
class MyList:
'自定義類型的列表,用來保存數據,內部用一個列表來存儲數據'
def __init__(self, iterable=()):
self.data = [x for x in iterable]
def __repr__(self):
return 'MyList(%s)' % self.data
def __len__(self):
'''返回長度'''
print("__len__方法被調用")
return len(self.data)
def __bool__(self):
print("__bool__方法調用")
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為假值')關于如何理解python的函數重寫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。