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
- Python模組過載的五種方法Python
- python過載父類的__init__方法Python
- Python中類方法過載---大部分Python
- Python中有重寫和過載的方法嗎?Python
- 方法過載原理
- java -方法- 過載Java
- java方法過載Java
- 方法的過載
- python-過載Python
- Java方法03:方法的過載Java
- 【Java】方法的過載Java
- Java 方法過載概念Java
- JAVA 方法過載(轉)Java
- Java - 14 方法過載Java
- python支援過載嗎Python
- python中的過載Python
- Python 運算子過載Python
- C#方法過載概念C#
- Java中方法重寫與方法過載Java
- Python 函式如何過載?Python函式
- python之運算子過載Python
- Python 類,函式過載Python函式
- Python——運算子過載(1)Python
- Jquery datatables 過載資料方法jQuery
- webService 介面方法過載問題Web
- Java繼承中成員方法的overload(過載/過載)Java繼承
- Python重新載入模組方法Python
- python3-----繼承 過載Python繼承
- javascript方法過載簡單介紹JavaScript
- VS2005入門之過載方法以及運算子過載
- [轉載] Java Challengers#1:JVM中的方法過載JavaJVM
- python入門基礎(14)--類的屬性、成員方法、靜態方法以及繼承、過載Python繼承
- python中實現函式過載Python函式
- python函式過載是什麼?Python函式
- 【python隨筆】之【運算子過載】Python
- python 類的繼承與過載Python繼承