1. 程式人生 > >Python 運算符重載 [轉載]

Python 運算符重載 [轉載]

defined 運算 AI 描述 引用 索引 idt delet r+

構造函數與表達式: __init__, __sub__

技術分享圖片

常見運算符重載方法

method overload call
__init__ 構造函數 對象創建: X = Class(args)
__del__ 析構函數 X對象收回
__add__ 雲算法+ 如果沒有_iadd_, X+Y, X+=Y
__or__ 運算符| 如果沒有_ior_,X|Y, X|=Y
_repr__, __str__ 打印,轉換 print(X),repr(X),str(X)
__call__ 函數調用 X(*args, **kwargs)
__getattr__ 點號運算 X.undefined
__setattr__ 屬性賦值語句 X.any=value
__delattr__ 屬性刪除 del X.any
__getattribute__ 屬性獲取 X.any
__getitem__ 索引運算 X[key],X[i:j]
__setitem__ 索引賦值語句 X[key],X[i:j]=sequence
__delitem__ 索引和分片刪除 del X[key],del X[i:j]
__len__ 長度 len(X),如果沒有__bool__,真值測試
__bool__ 布爾測試 bool(X)
__lt__, __gt__,
__le__, __ge__,
__eq__, __ne__
特定的比較 X<Y,X>Y,X<=Y,X>=Y,
X==Y,X!=Y
註釋:(lt: less than, gt: greater than,
le: less equal, ge: greater equal,
eq: equal, ne: not equal
__radd__ 右側加法 other+X
__iadd__ 實地(增強的)加法 X+=Y(or else __add__)
__iter__, __next__ 叠代環境 I=iter(X), next()
__contains__ 成員關系測試 item in X(任何可叠代)
__index__ 整數值 hex(X), bin(X), oct(X)
__enter__, __exit__ 環境管理器 with obj as var:
__get__, __set__,
__delete__
描述符屬性 X.attr, X.attr=value, del X.attr
__new__ 創建 在__init__之前創建對象

索引和分片: __getitem__, __setitem__

如果在類中定義的話,則對於實例的索引運算,會自動調用__getitem__。當實例X出現X[i]這樣的索引運算時,Python會自動調用__getitem__方法

技術分享圖片

攔截分片

技術分享圖片

索引叠代: __getitem__

技術分享圖片

叠代器對象: __iter__, __next__

盡管上一節__getitem__是有效的,但它是叠代退而求其次的方法。Python所有的叠代環境會有優先嘗試__iter__的方法,再嘗試__getitem__。

從技術角度上講,叠代環境是通過iter去嘗試尋找__iter__方法來實現,而這種方法返回一個叠代器對象。如果已經提供了,python會重復調用叠代器對象的next()方法,直到發生StopIteration異常。如果沒有找到__iter__,python會使用__getitem__機制。

技術分享圖片

__getattr__和__setattr__捕捉屬性的的引用

__getattr__攔截屬性.運算符

技術分享圖片

__repr__和__str__會返回字符串表達形式

技術分享圖片

__radd__處理右側加法

技術分享圖片

__call__攔截調用

當實例調用時,使用__call__方法

技術分享圖片

__del__是析構器

當實例創建時,就會調用__init__構造方法。當實例空間被收回時,析構函數__del__就會自動執行。

技術分享圖片

Python 運算符重載 [轉載]