Python 運算符重載 [轉載]
阿新 • • 發佈:2018-03-18
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 運算符重載 [轉載]