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]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
我們在類A中過載了列表+
號運算子的方法__add__
,它只輸出Hello, python.
,所以當我們類A的例項物件newlst呼叫+
號運算子時,並沒有像lst一樣,新增新的成員,而只是輸出字串(這就是重構運算子方法)。
相關文章
- Python 方法過載Python
- python中的過載Python
- Python模組過載的五種方法Python
- Python中有重寫和過載的方法嗎?Python
- 方法的過載
- [轉載] Java Challengers#1:JVM中的方法過載JavaJVM
- 【Java】方法的過載Java
- Java方法03:方法的過載Java
- python中實現函式過載Python函式
- Mybatis的Mapper中的方法為什麼不能過載?MyBatisAPP
- 在 Python 中實現函式過載Python函式
- 方法過載原理
- java -方法- 過載Java
- java方法過載Java
- python-過載Python
- PHP中的過載PHP
- 基本方法的呼叫與過載
- 如何在Python中實現函式過載Python函式
- Java - 14 方法過載Java
- Java 方法過載概念Java
- 過載運算子的常見方法
- Python 運算子過載Python
- python支援過載嗎Python
- Python中列表的方法Python
- python類中的方法Python
- 如何在 ASP.NET Core 5 中過載 Action 方法ASP.NET
- 初學Python過程中,例項方法和類方法的區別是什麼?Python
- python入門基礎(14)--類的屬性、成員方法、靜態方法以及繼承、過載Python繼承
- python之運算子過載Python
- Python 函式如何過載?Python函式
- python中的特殊方法使用Python
- Python中sort()方法的使用Python
- Python中的常見方法Python
- python 中的 __getitem__方法Python
- Python中建立DataFrame的方法Python
- Java中方法重寫與方法過載Java
- Nginx中的負載平衡方法Nginx負載
- 《java程式設計基礎》方法的過載Java程式設計
- 關於python建構函式的過載Python函式