python中的過載

何惜戈發表於2018-11-11

在一些靜態語言中,大都存在有一個過載的概念。這是在OOP(面對物件程式設計)中一個必不可少的一個行為。
所謂過載,就是多個相同函式名的函式,根據傳入的引數個數,引數型別而執行不同的功能。所以函式過載實質上是為了解決程式設計中引數可變不統一的問題。

python 中的過載

  在python中,具有過載的思想卻沒有過載的概念。所以有的人說python這麼語言並不支援函式過載,有的人說python具有過載功能。實際上python程式設計中具有過載的目的缺無過載的行為,或者說是python並不需要過載!
  python是一門動態語言,不需要宣告變數型別,函式中可以接受任何型別的引數也就無法根據引數型別來支援過載,python沒有必要去考慮引數的型別問題,這些都可以在函式內部判斷處理,並無必要去在寫一個函式。python 有多種傳參方式,預設引數/可變引數/可變關鍵字引數可以處理函式引數中引數可變的問題。

python3.4中增加的過載機制

如果你不用過載就會渾身難受的話
那麼在python3.4中提供有一個轉發機制來實現過載

from functools import singledispatch   
@singledispatch 
def function(obj): 
    print('%r'%(obj))
       
@function.register(int) 
def function_int(obj): 
    print('Integer: %d'%(obj)) 
  
@function.register(str) 
def function_int(obj): 
    print('String: %s'%(obj)) 
  
@function.register(list) 
def function_list(obj): 
    print('List: %r'%(obj)) 
  
  
if __name__ == "__main__": 
     function(1) 
     function('hello') 
     function(range(3)) 
     function(object) 

相關文章