Denis Stepanov
Denis Stepanov

Reputation: 90

Python type annotations: Proper way to annotate functions returning library object

What is the proper way to annotate a type function returns in this code?

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

Should be Response imported for that, or TypeVar should be used?

Upvotes: 3

Views: 988

Answers (2)

Nikolaj Š.
Nikolaj Š.

Reputation: 1986

I think you should import Response and use it. Creating TypeVar complicates typing for no good reason:

  1. If your module had already had Response used somewhere (and thus imported), you wouldn't even think about not using it for the type hint.
  2. If you introduce another function or whatever to this module later and you need Response class there, you'll be stuck with TypeVar not matching actual Responses
  3. If your module is imported by another module (or even third-party one), a function returning Response disguised as a custom TypeVar would make code more confusing.

Upvotes: 2

cander
cander

Reputation: 1

Do you want this?

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

Upvotes: 0

Related Questions