使用可选参数处理函数重载的正确方法是什么?

时间:2017-05-01 18:18:24

标签: python

这就是我想要实现的目标:

# first way to call. key value pair, where value could be anything.
def multiple_ways_to_call(key_param, value_param, optional = "optional"):
    pass

# second way to call. object_param is an instance of a specific class. type(object_param) == "myclass"
def multiple_ways_to_call(object_param, optional = "optional"):
    pass

我知道实际上不支持函数重载。我之前只是通过检查最后一个参数是否为null来完成它,但是我现在不知道如何使用可选参数。

我该如何处理这种情况?我只是对调用者不可见的区别。

1 个答案:

答案 0 :(得分:0)

在Python 3.4中添加了@singledispatch模块中的functools装饰器 - 请参阅Python Single Dispatch

如果您使用的是早期版本的Python,则会将其移植到is available on PYPI

@singledispatch仅根据赋予函数的第一个参数的类型进行区分,因此它不像其他语言那样灵活。

文档示例:

from functools import singledispatch
@singledispatch
def fun(arg, verbose=False):
    if verbose:
        print("Let me just say,", end=" ")
    print(arg)

@fun.register(int)
def _(arg, verbose=False):
    if verbose:
        print("Strength in numbers, eh?", end=" ")
    print(arg)

@fun.register(list)
def _(arg, verbose=False):
    if verbose:
        print("Enumerate this:")
    for i, elem in enumerate(arg):
        print(i, elem)