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 无缘无故地使输入复杂化:

  1. 如果您的模块已经 Response 在某处使用(并因此被导入),您甚至不会考虑不将它用于类型提示。
  2. 如果您稍后向该模块引入另一个函数或其他任何东西,并且您在那里需要 Response class,您将陷入 TypeVar 与实际 Response 不匹配的状态s
  3. 如果您的模块是从另一个模块(甚至 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