什么是装饰器,使用装饰器实现函数重载
目录
函数重载是指同一个函数名称,但是参数不同而导致执行不同的操作。 在 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 时会根据传入的参数类型来调用不同的实现。
这只是一个简单的例子,在实际应用中,可能需要更加复杂的判断逻辑。