Python中常見運算符重載方法

在類中,對內置對象(例如:整數和列表)所能做的事,幾乎都有相應的特殊名稱的重載方法。最常見的就是重載類的構造函數(__init__函數)

方法 重構 調用
__init__ 構造函數 對象建立:X = Class(args)
__del__ 析構函數 X對象收回
__add__ 運算符+ 如果沒有_iadd_, X + Y, X += Y
__or__ 運算符|(位OR) 如果沒有 _ior_, X | Y, X |= Y
__repr__, __str__ 打印,轉換 print(X), repr(X), str(X)
__call__ 函數調用 X(*args, **kargs)
__getattr__ 點號運算 X.undefined
__setattr__ 屬性賦值語句 X.any = value
__delattr__ 屬性刪除 del X.any
__getattribute__ 屬性獲取 X.any
__getitem__ 索引運算 X[key], X[i:j], 沒__iter__時的for循環和其他迭代器
__setitem__ 索引賦值語句 X[key] = value, X[i:j] = sequence
__delitem__ 索引和分片刪除 del X[key], del X[i:j]
__len__ 長度 len(X), 如果沒有__bool__, 真值測試
__bool__ 布爾測試 bool(X), 真測試(在python2.6中叫做_
__lt__, __gt__ 特定比較 X < Y, X > Y, X <= Y, X >= Y
__le__, __ge__ 特定比較 X == Y, X != Y
__radd__ 右側加法 other + X
__iadd__ 實地(增強的)加法 X += Y (or else add
__iter__, __next__ 迭代環境 I = iter(X), next(I); for loops,
__contains__ 成員關係測試 item in X(任何可迭代的對象)
__index__ 整數值 hex(X), bin(X), oct(X), O[X], O[X:]
__enter__, __exit__ 環境管理器 with obj as var:
__get__, __set__ 描述符屬性 X.attr, X.attr = value, del X.value
__delete__ 描述符屬性 descr.__delete__(self, obj) –> None
__new__ 創建 在__init__之前創建對象

下面我們看一個例子,重構列表中+運算符, 變成只打印: Hello, Python.

# 先看看原list加號運算符
>>> lst = list()
>>> lst.append(1)
>>> lst
[1]
>>> lst + [2]
>>> lst
[1, 2]

# 重構`+`號運算符方法__add__
class A(list):
    def __add__(self, other):
        print 'Hello, Python.'

>>> newlst = A()
>>> newlst.append(1)
>>> newlst + [2]
Hello, Python.
>>> newlst
[1]

我們在類A中重載了列表+號運算符的方法__add__,它只輸出Hello, Python.,所以當我們類A的實例對象newlst調用+號運算符時,並沒有像lst一樣,添加新的成員,而只是輸出字符串(這就是重構運算符方法)。

發佈了58 篇原創文章 · 獲贊 100 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章