Python 类型注释:注释返回库对象的函数的正确方法
Python type annotations: Proper way to annotate functions returning library object
在此代码中注释类型函数 returns 的正确方法是什么?
from requests import Request, Session
def make_request(method: str, url: str) -> ??? : # Response object will be returned
request = Request(method, url).prepare()
session = Session()
r = session.send(request)
return r
应该 Response
导入,还是应该使用 TypeVar
?
我认为您应该导入 Response
并使用它。创建 TypeVar
无缘无故地使输入复杂化:
- 如果您的模块已经
Response
在某处使用(并因此被导入),您甚至不会考虑不将它用于类型提示。
- 如果您稍后向该模块引入另一个函数或其他任何东西,并且您在那里需要
Response
class,您将陷入 TypeVar
与实际 Response
不匹配的状态s
- 如果您的模块是从另一个模块(甚至 third-party 一个)导入的,返回
Response
伪装成自定义 TypeVar
的函数会使代码更加混乱。
你想要这个吗?
from requests import Request, Session, Response
def make_request(method: str, url: str) -> Response : # Response object will be returned
request = Request(method, url).prepare()
session = Session()
r = session.send(request)
return r
在此代码中注释类型函数 returns 的正确方法是什么?
from requests import Request, Session
def make_request(method: str, url: str) -> ??? : # Response object will be returned
request = Request(method, url).prepare()
session = Session()
r = session.send(request)
return r
应该 Response
导入,还是应该使用 TypeVar
?
我认为您应该导入 Response
并使用它。创建 TypeVar
无缘无故地使输入复杂化:
- 如果您的模块已经
Response
在某处使用(并因此被导入),您甚至不会考虑不将它用于类型提示。 - 如果您稍后向该模块引入另一个函数或其他任何东西,并且您在那里需要
Response
class,您将陷入TypeVar
与实际Response
不匹配的状态s - 如果您的模块是从另一个模块(甚至 third-party 一个)导入的,返回
Response
伪装成自定义TypeVar
的函数会使代码更加混乱。
你想要这个吗?
from requests import Request, Session, Response
def make_request(method: str, url: str) -> Response : # Response object will be returned
request = Request(method, url).prepare()
session = Session()
r = session.send(request)
return r