python3.4中增加的重載機制,示例:

python重載
1 from functools import singledispatch
2 @singledispatch
3 def function(obj):
4 print('%r'%(obj))
5 @function.register(int)
6 def function_int(obj):
7 print('Integer: %d'%(obj))
8 @function.register(str)
9 def function_int(obj):
10 print('String: %s'%(obj))
11 @function.register(list)
12 def function_list(obj):
13 print('List: %r'%(obj))
14 if __name__ == "__main__":
15 function(1)
16 function('hello')
17 function(range(3))
18 說明:
@singledispatch裝飾一個函數,將定義一個泛型函數
泛函數的register()屬性是一個裝飾器。對于有類型注釋的函數,這個裝飾器將自動匹配第一個參為該類型的已注冊函數重載泛函數:
如果用泛函數的register()屬性進裝飾的函數的參數沒有類型注釋,那么我們可以在register()裝飾器中明確聲明合適的類型:
泛涵數將選擇離調用最近的可分派的函數,即,泛函數將分派在順序上最后定義的函數。
經過測試,python不支持多參數的重載。