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繼承中成員方法的overload(過載/過載)Java繼承
- python過載父類的__init__方法Python
- [轉載] Java Challengers#1:JVM中的方法過載JavaJVM
- 方法的過載
- Python中有重寫和過載的方法嗎?Python
- Python中常見運算子過載方法Python
- 【Java】方法的過載Java
- Java方法03:方法的過載Java
- python中實現函式過載Python函式
- python3中實現函式的過載Python函式
- Mybatis的Mapper中的方法為什麼不能過載?MyBatisAPP
- PHP中的過載PHP
- 在 Python 中實現函式過載Python函式
- 方法過載原理
- java -方法- 過載Java
- java方法過載Java
- 如何在Python中實現函式過載Python函式
- python 中為什麼不需要過載Python
- python-過載Python
- Java 方法過載概念Java
- JAVA 方法過載(轉)Java
- Java - 14 方法過載Java
- 如何在 ASP.NET Core 5 中過載 Action 方法ASP.NET
- oracle PL/SQL中的過載OracleSQL
- 關於Python中函式過載問題的思考(原創)Python函式
- Python中列表的方法Python
- python類中的方法Python
- python支援過載嗎Python
- Python 運算子過載Python
- C#方法過載概念C#
- python 類的繼承與過載Python繼承
- Nginx中的負載平衡方法Nginx負載
- [python]web框架中的程式碼自動過載怎麼實現PythonWeb框架
- 初學Python過程中,例項方法和類方法的區別是什麼?Python