@overload 装饰器实现函数重载
python中实现函数重载
@overload
也是一种类型注解,表明同名方法有多种实现。
例子:
1from typing import overload, List, Union
2
3class MyStrList:
4 def __init__(self, content: List[str]):
5 self.content = content
6
7 @overload
8 def __getitem__(self, index: int) -> str:
9 ...
10
11 @overload
12 def __getitem__(self, s: slice) -> 'MyStrList':
13 ...
14
15 def __getitem__(self, item: Union[int, slice]) -> Union[str, 'MyStrList']:
16 if isinstance(item, int):
17 return self.content[item]
18 elif isinstance(item, slice):
19 return MyStrList(self.content[item])
20 else:
21 raise TypeError("Invalid argument type.")
22
23data = MyStrList(["hello", ",", "world"])
24item = data[0] # 等同于 `MyStrList[0]`
25items = data[1:2] # 等同于 `MyStrList[1:2]`
Note:
被@overload
装饰的函数不能直接调用。
真正的函数实现应该是没有@overload
装饰的版本,它需要处理所有可能的参数类型和返回类型。