Python 方法過載
python的方法過載有些特殊,在python中,如下的程式碼並不能實現方法過載:
def Aa():
pass
def Aa(a):
print(1)
def Aa(a,b):
print(2)
# 這裡想呼叫Aa的無引數版本,但是直譯器會報錯,提示找不到Aa方法
Aa()
為什麼會出現這種違法靜態語言直覺的結果?因為,在python中,方法也是attribute,方法名就是Key,所以每個方法名只能有一個方法體,以上程式碼中,當Aa被定義了多次,每一次新的定義都會覆蓋之前的定義,所以,可以在dir()中看到,Aa最終指向的函式體是Aa(a,b),但直譯器發現呼叫Aa時卻缺少兩個引數,所以會報錯。
在Java中,方法過載有針對兩個場景:
- 引數型別不同
- 引數個數不同
而Python無法在語法層面上針對第一種情況實現過載,但支援對第二種情況的過載,對應的語法就是預設引數,所以,要實現以上的過載,在pytho中應該這麼寫:
def Aa(a=1, b=1):
print(2)
# 無引數版本
Aa()
# 一個引數版本
Aa(1)
# 兩個引數版本
Aa(1, 2)
那麼,如果想實現java中的這種過載需求呢:
public void Aa(int a, float b){
System.out.print(1);
}
public void Aa(float a, int b){
System.out.print(2);
}
python語法沒法支援,只能用程式碼邏輯上實現:
def Aa(a=1, b=1):
if type(a) == int and type(b) == float:
print(1)
elif type(a) == float and type(b) == int:
print(2)
# Aa(int,float)
Aa(1, 1.0)
# Aa(float,int)
Aa(1.0, 1)
相關文章
- Python模組過載的五種方法Python
- Python中有重寫和過載的方法嗎?Python
- 方法過載原理
- java -方法- 過載Java
- java方法過載Java
- 方法的過載
- python-過載Python
- Java方法03:方法的過載Java
- Java - 14 方法過載Java
- Java 方法過載概念Java
- 【Java】方法的過載Java
- python中的過載Python
- Python 運算子過載Python
- python支援過載嗎Python
- python之運算子過載Python
- Python 函式如何過載?Python函式
- Java中方法重寫與方法過載Java
- 基本方法的呼叫與過載
- python3-----繼承 過載Python繼承
- 過載運算子的常見方法
- python入門基礎(14)--類的屬性、成員方法、靜態方法以及繼承、過載Python繼承
- python中實現函式過載Python函式
- 【python隨筆】之【運算子過載】Python
- python函式過載是什麼?Python函式
- [轉載] Java Challengers#1:JVM中的方法過載JavaJVM
- 在 Python 中實現函式過載Python函式
- reloadium:提供Python高階熱過載功能Python
- 《java程式設計基礎》方法的過載Java程式設計
- 關於python建構函式的過載Python函式
- 如何在Python中實現函式過載Python函式
- [轉載] python通過反射執行程式碼Python反射行程
- Java基礎03 構造器與方法過載Java
- Java入門第12天 (方法過載 ,方法的引數傳遞)Java
- 為什麼 Python 沒有函式過載?如何用裝飾器實現函式過載?Python函式
- python的__init__幾種方法總結【轉載】Python
- Mybatis的Mapper中的方法為什麼不能過載?MyBatisAPP
- 如何在 ASP.NET Core 5 中過載 Action 方法ASP.NET
- 12 Python物件導向程式設計:運算子過載Python物件程式設計