When/why use types from typing module for type hints

Viewed 465

What is exactly the 'right' way for type hinting? My IDE (and resulting code) works fine for type hints using either of below options, but some types can be imported from the typing module. Is there a preference for using the import from the typing module over builtins (like list or dict)?

Examples:

from typing import Dict
def func_1(arg_one: Dict) -> Dict:
    pass

and

def func_2(arg_one: dict) -> dict:
    pass
2 Answers

The "right" way is to use builtins when possible (e.g. dict over typing.Dict). typing.Dict is only needed if you use Python < 3.9. In older versions you couldn't use generic annotations like dict[str, Any] with builtins, you had to use Dict[str, Any]. See PEP 585

There is no big difference between typing.Dict and dict.

Just typing.Dict is actually a Generic Type, so it allows you to specify subtypes inside the brackets.

Like:

from typing import Dict
def func_1(arg_one: Dict[str, int]) -> Dict:
    pass

But typing.Dict is only necessary if your Python version is under 3.9. Other wise you could do the same with regular dicts.

Example Python >= 3.9:

def func_1(arg_one: dict[str, int]) -> dict:
    pass
Related