溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解python的函數重寫

發布時間:2020-07-10 14:21:02 來源:億速云 閱讀:162 作者:Leah 欄目:編程語言

這篇文章運用簡單易懂的例子給大家介紹如何理解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的函數重寫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女