python 的如何实现根据参数的不同,typing hint 不同的返回值类型?
比如对于下面这段代码:
python">with open(BASE_DIR/'001.txt','r') as file: content = file.read()
我将鼠标悬停于 read
之上,可以看到返回值是 str
但是我们将 mode 改为 rb
, read 的返回值类型就变成了 bytes
了
with open(BASE_DIR/'001.jpg','rb') as file: content = file.read()
如果我要自己实现一个 xopen 函数,来仿写 open,要怎么实现上面的需求?
需求就是:根据参数的不同,返回值被 vscode
、pycharm
识别到的 typing 不同!
重点是 typing hint ,因为不能被编辑器智能提示类型的代码是毫无意义的
我不知道能不能用泛型来实现这一点,参考:Python 如何为 class 添加 Typing hint?
因为我记忆中的类型是:『根据参数的类型,来确定返回值的类型』
当我的需求是:『根据参数的值,来确定返回值的类型』
入口是 『类型』 和 『值』 的区别,泛型好像不能满足我!?
回答:
自己解决了:
from typing import overload, TypeAlias, LiteralRT: TypeAlias = Literal[
"r",
]
RB: TypeAlias = Literal[
"rb",
]
@overload
def open(
mode: RT = ...,
) -> str: ...
@overload
def open(
mode: RB = ...,
) -> bytes: ...
result = open('rb')
鼠标悬停的结果:
mode 改成 r
from typing import overload, TypeAlias, LiteralRT: TypeAlias = Literal[
"r",
]
RB: TypeAlias = Literal[
"rb",
]
@overload
def open(
mode: RT = ...,
) -> str: ...
@overload
def open(
mode: RB = ...,
) -> bytes: ...
result = open('r')
以上是 python 的如何实现根据参数的不同,typing hint 不同的返回值类型? 的全部内容, 来源链接: utcz.com/p/938537.html