Chapter 59
59 / 71Type Hints
What might confuse you right now
"Python is dynamically typed. Are type hints even necessary?"
For small personal scripts, not really. But in team projects and long-term codebases, typing noticeably reduces silly bugs.
One-line definition
Type hints are explicit declarations of parameter, return, and variable types -- for IDEs and static analysis tools.
Real-life analogy
Adding types to code is like labeling storage bins. The next person who picks it up gets oriented way faster.
Minimal runnable example
def greet(name: str, age: int) -> str:
return f"Hello {name}, age {age}"
Quick quiz (5 min)
- Add parameter/return types to 3 functions.
- Add generics to
listanddict. - Use
Optionalfor nullable fields.
Quiz answer guidelines & grading criteria
- Answer direction: working code that covers core conditions and edge inputs from the prompt.
- Criterion 1 (Correctness): Main flow produces correct results, key branches execute.
- Criterion 2 (Readability): Clear variable names, no excessive nesting.
- Criterion 3 (Robustness): Basic protection against null values, type errors, or unexpected input.
Transfer task (homework)
Pick some old code, add complete type hints, and run mypy once.
Acceptance criteria
You can independently:
- Write basic type annotations
- Use
Optionaland container generics - Use static analysis to catch type issues
Common errors & debugging steps (beginner edition)
- Can't understand the error: read the last line for the error type (e.g.,
TypeError,NameError), then trace back to the relevant code line. - Not sure about a variable's value: temporarily add
print(variable, type(variable))at key points to verify data matches expectations. - Code changes aren't taking effect: confirm the file is saved, you're running the right file, and your terminal environment (venv) is correct.
Common misconceptions
- Misconception: Type hints automatically block errors at runtime.
- Reality: Type hints are primarily for static analysis and readability. Python doesn't enforce them at runtime.