3.1. Typing Basic¶
Also known as: "type annotations", "type hints", "gradual typing"
Types are not required, and never will be
Good IDE will give you hints
Types are used extensively in system libraries
More and more books and documentations use types
Introduced in Python 3.5
Since Python 3.5: PEP 484 -- Type Hints
Since Python 3.6: PEP 526 -- Syntax for Variable Annotations
Since Python 3.8: PEP 544 -- Protocols: Structural subtyping (static duck typing)
Since Python 3.9: PEP 585 -- Type Hinting Generics In Standard Collections
Since Python 3.10: PEP 604 -- Allow writing union types as X | Y
To type check use:
mypy
,pyre-check
,pytypes
Types are not required, and never will be. -- Guido van Rossum, Python initiator, core developer, former BDFL
It should be emphasized that Python will remain a dynamically typed language, and the authors have no desire to ever make type hints mandatory, even by convention. -- Python Software Foundation

Figure 3.3. Timeline of changes to type annotations from Python 3.0 to now [1]¶
3.1.1. Int¶
Used to inform static type checker that the variable should be int
Declaration:
>>> data: int
>>> data: int = 1
>>> data: int = -1
Example:
>>> data: int
>>>
>>> data = 1 # ok
>>> data = -1 # ok
>>> data = 'hello' # error
3.1.2. Float¶
Used to inform static type checker that the variable should be float
Declaration:
>>> data: float
>>> data: float = 0.0
>>> data: float = 1.23
>>> data: float = -1.23
Example:
>>> data: float
>>>
>>> data = 1.0 # ok
>>> data = -1.0 # ok
>>> data = 'hello' # error
3.1.3. Str¶
Used to inform static type checker that the variable should be str
Declaration:
>>> data: str
>>> data: str = ''
>>> data: str = 'hello'
Example:
>>> data: str
>>>
>>> data = 'Mark' # ok
>>> data = 'Watney' # ok
>>> data = 'Mark Watney' # ok
3.1.4. Bool¶
Used to inform static type checker that the variable should be bool
Declaration:
>>> data: bool
>>> data: bool = True
>>> data: bool = False
Example:
>>> data: bool
>>>
>>> data = True # ok
>>> data = False # ok
>>> data = None # error
3.1.5. None¶
Used to inform static type checker that the variable should be None
Declaration:
>>> data: None
>>> data: None = None
Example:
>>> data: None
>>>
>>> data = True # error
>>> data = False # error
>>> data = None # ok
3.1.6. Errors¶
Types are not Enforced
This code will run without any problems
Types are not required, and never will be
Although
mypy
,pyre-check
orpytypes
will throw error
>>> name: int = 'Mark Watney'
3.1.7. Use Case - 0x01¶
>>> firstname: str = 'Mark'
>>> lastname: str = 'Watney'
>>> age: int = 40
>>> adult: bool = True
3.1.8. Further Reading¶
3.1.9. References¶
3.1.10. Assignments¶
"""
* Assignment: Typing Basic Int
* Complexity: easy
* Lines of code: 3 lines
* Time: 2 min
English:
1. Declare proper types for variables
2. Run doctests - all must succeed
Polish:
1. Zadeklaruj odpowiedni typ zmiennych
2. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert a == 1, \
'Do not modify variable `a` value, just add type annotation'
>>> assert b == 0, \
'Do not modify variable `b` value, just add type annotation'
>>> assert c == -1, \
'Do not modify variable `c` value, just add type annotation'
"""
# Declare proper types for variables
a: ... = 1
b: ... = 0
c: ... = -1
"""
* Assignment: Typing Basic Float
* Complexity: easy
* Lines of code: 3 lines
* Time: 2 min
English:
1. Declare proper types for variables
2. Run doctests - all must succeed
Polish:
1. Zadeklaruj odpowiedni typ zmiennych
2. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert a == 1.0, \
'Do not modify variable `a` value, just add type annotation'
>>> assert b == 0.0, \
'Do not modify variable `b` value, just add type annotation'
>>> assert c == -1.0, \
'Do not modify variable `c` value, just add type annotation'
"""
# Declare proper types for variables
a: ... = 1.0
b: ... = 0.0
c: ... = -1.0
"""
* Assignment: Typing Basic Logic
* Complexity: easy
* Lines of code: 3 lines
* Time: 2 min
English:
1. Declare proper types for variables
2. Run doctests - all must succeed
Polish:
1. Zadeklaruj odpowiedni typ zmiennych
2. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert a == True, \
'Do not modify variable `a` value, just add type annotation'
>>> assert b == False, \
'Do not modify variable `b` value, just add type annotation'
>>> assert c == None, \
'Do not modify variable `c` value, just add type annotation'
"""
# Declare proper types for variables
a: ... = True
b: ... = False
c: ... = None
"""
* Assignment: Typing Basic Str
* Complexity: easy
* Lines of code: 3 lines
* Time: 2 min
English:
1. Declare proper types for variables
2. Run doctests - all must succeed
Polish:
1. Zadeklaruj odpowiedni typ zmiennych
2. Uruchom doctesty - wszystkie muszą się powieść
Tests:
>>> import sys; sys.tracebacklimit = 0
>>> assert a == '', \
'Do not modify variable `a` value, just add type annotation'
>>> assert b == 'abc', \
'Do not modify variable `b` value, just add type annotation'
>>> assert c == '123', \
'Do not modify variable `c` value, just add type annotation'
"""
# Declare proper types for variables
a: ... = ''
b: ... = 'abc'
c: ... = '123'