什么是装饰器,使用装饰器实现函数重载

目录

函数重载是指同一个函数名称,但是参数不同而导致执行不同的操作。 在 Python 中,函数重载不是内置的,但是可以使用装饰器来实现。

下面是一个简单的例子,使用装饰器实现函数重载:

python
def overload(*types):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for (a, t) in zip(args, types):
                assert isinstance(a, t), \
                    f"arg {a} does not match {t}"
            return func(*args, **kwargs)
        return wrapper
    return decorator

@overload(int, int)
def add(a, b):
    return a + b

@overload(str, str)
def add(a, b):
    return a + b

print(add(1, 2))
print(add('hello', 'world'))

这个例子中, @overload(int, int) 和 @overload(str, str)是两个不同的装饰器, 传递给同一个函数 add, 会导致两个不同的实现。

这样就可以在一个函数里实现多个重载,在调用 add 时会根据传入的参数类型来调用不同的实现。

这只是一个简单的例子,在实际应用中,可能需要更加复杂的判断逻辑。

随机文章