python 的如何实现根据参数的不同,typing hint 不同的返回值类型?

比如对于下面这段代码:

python">with open(BASE_DIR/'001.txt','r') as file:

content = file.read()

我将鼠标悬停于 read 之上,可以看到返回值是 str

python 的如何实现根据参数的不同,typing hint 不同的返回值类型?

但是我们将 mode 改为 rb , read 的返回值类型就变成了 bytes

with open(BASE_DIR/'001.jpg','rb') as file:

content = file.read()

python 的如何实现根据参数的不同,typing hint 不同的返回值类型?


如果我要自己实现一个 xopen 函数,来仿写 open,要怎么实现上面的需求?

需求就是:根据参数的不同,返回值被 vscodepycharm 识别到的 typing 不同!

重点是 typing hint ,因为不能被编辑器智能提示类型的代码是毫无意义的

我不知道能不能用泛型来实现这一点,参考:Python 如何为 class 添加 Typing hint?

因为我记忆中的类型是:『根据参数的类型,来确定返回值的类型』

当我的需求是:『根据参数的值,来确定返回值的类型』

入口是 『类型』 和 『值』 的区别,泛型好像不能满足我!?


回答:

自己解决了:

from typing import overload, TypeAlias, Literal

RT: TypeAlias = Literal[

"r",

]

RB: TypeAlias = Literal[

"rb",

]

@overload

def open(

mode: RT = ...,

) -> str: ...

@overload

def open(

mode: RB = ...,

) -> bytes: ...

result = open('rb')

鼠标悬停的结果:

python 的如何实现根据参数的不同,typing hint 不同的返回值类型?


mode 改成 r

from typing import overload, TypeAlias, Literal

RT: 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 不同的返回值类型?

以上是 python 的如何实现根据参数的不同,typing hint 不同的返回值类型? 的全部内容, 来源链接: utcz.com/p/938537.html

回到顶部