python3中實現函式的過載

guoqianqian5812發表於2017-07-15

python中是不支援函式過載的,但在python3中提供了這麼一個裝飾器functools.singledispatch,它叫做單分派泛函式,可以通過它來完成python中函式的過載,讓同一個函式支援不同的函式型別,它提供的目的也正是為了解決函式過載的問題。
看下面的例子,應該知道怎麼去使用它完成函式的過載。

from functools import singledispatch

@singledispatch
def show(obj):
    print (obj, type(obj), "obj")

@show.register(str)
def _(text):
    print (text, type(text), "str")

@show.register(int)
def _(n):
    print (n, type(n), "int")
show(1)
show("xx")
show([1])

結果:

1 <class 'int'> int
xx <class 'str'> str
[1] <class 'list'> obj

相關文章