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一樣,新增新的成員,而只是輸出字串(這就是重構運算子方法)。
相關文章
- Python 運算子過載Python
- python之運算子過載Python
- Python——運算子過載(1)Python
- 運算子過載
- 過載運算子
- 【python隨筆】之【運算子過載】Python
- [Lang] 運算子過載
- C++運算子過載C++
- C++ 運算子過載C++
- C++——運算子過載C++
- [C++]運算子過載C++
- C# 運算子過載C#
- 運算子過載筆記筆記
- python高階使用:運算子_init_過載Python
- VS2005入門之過載方法以及運算子過載
- Javascript實現運算子過載JavaScript
- 指標運算子過載(* 和 ->)指標
- 初步C++運算子過載學習筆記<3> 增量遞減運算子過載C++筆記
- C++ 過載運算子和過載函式C++函式
- 12 Python物件導向程式設計:運算子過載Python物件程式設計
- C++運算子過載詳解C++
- C++中運算子的過載C++
- 瞭解下C# 運算子過載C#
- 深入C++05:運算子過載C++
- 型別轉換 運算子過載型別
- 過載運算子、解構函式函式
- C++過載的奧義之運算子過載C++
- YTU-OJ-實現複數類中的加運算子過載【C++運算子過載】C++
- 重拾Kotlin(18)-運算子過載Kotlin
- 03常見運算子
- SQL Server中常見負載均衡方法(下)VQSQLServer負載
- SQL Server中常見負載均衡方法(上)LNSQLServer負載
- 優先佇列中過載運算子>和佇列
- Python運算子Python
- 開心檔之C++ 過載運算子和過載函式C++函式
- Python 運算子優先順序 運算子Python
- CSS居中常見方法CSS
- Python入門——變數和常見的運算子Python變數