python3.4中增加的重載機(jī)制,示例:

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裝飾一個函數(shù),將定義一個泛型函數(shù)
泛函數(shù)的register()屬性是一個裝飾器。對于有類型注釋的函數(shù),這個裝飾器將自動匹配第一個參為該類型的已注冊函數(shù)重載泛函數(shù):
如果用泛函數(shù)的register()屬性進(jìn)裝飾的函數(shù)的參數(shù)沒有類型注釋,那么我們可以在register()裝飾器中明確聲明合適的類型:
泛涵數(shù)將選擇離調(diào)用最近的可分派的函數(shù),即,泛函數(shù)將分派在順序上最后定義的函數(shù)。
經(jīng)過測試,python不支持多參數(shù)的重載。