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不支持多参数的重载。