DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on • Edited on

Type hints in Python (5)

Buy Me a Coffee

*Memo:

<dict>:

from collections.abc import (
    MutableMapping, Mapping, Reversible,
    Collection, Sized, Container, Iterable
)

v: dict[int, str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}
# v: MutableMapping[int, str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}
# v: Mapping[int, str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}
# v: Reversible[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}
# v: Collection[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}
# v: Sized = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}
# v: Container[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}
# v: Iterable[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}

print(v)
# No error

print(v[0])
# Reversible, Iterable, Collection, Sized, Container and Iterable get error.

print(*v)
# Hashable, Sized and Container get error.

print(v|v)
# MutableMapping, Mapping, Reversible, Collection,
# Sized, Container and Iterable get error.
Enter fullscreen mode Exit fullscreen mode

<dict.keys()>:

from collections.abc import (
    KeysView, MappingView, Reversible,
    Collection, Sized, Container, Iterable
)

v: KeysView[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.keys()
# v: MappingView = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.keys()
# v: Reversible[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.keys()
# v: Collection[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.keys()
# v: Sized = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.keys()
# v: Container[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.keys()
# v: Iterable[int] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.keys()

print(v)
# No error

print(*v)
# MappingView, Sized and Container get error.

print(v|v)
# MappingView, Reversible, Collection, Sized,
# Container and Iterable get error.
Enter fullscreen mode Exit fullscreen mode

<dict.values()>:

from collections.abc import (
    ValuesView, MappingView, Hashable, Reversible,
    Collection, Sized, Container, Iterable
)

v: ValuesView[str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.values()
# v: MappingView = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.values()
# v: Hashable = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.values()
# v: Reversible[str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.values()
# v: Collection[str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.values()
# v: Sized = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.values()
# v: Container[str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.values()
# v: Iterable[str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.values()

print(v)
# No error

print(*v)
# MappingView, Hashable, Sized and Container get error.
Enter fullscreen mode Exit fullscreen mode

<dict.items()>:

from collections.abc import (
    ItemsView, MappingView, Reversible,
    Collection, Sized, Container, Iterable
)

v: ItemsView[int, str] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.items()
# v: MappingView = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.items()
# v: Reversible[tuple[int, str]] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.items()
# v: Collection[tuple[int, str]] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.items()
# v: Sized = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.items()
# v: Container[tuple[int, str]] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.items()
# v: Iterable[tuple[int, str]] = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E'}.items()

print(v)
# No error

print(*v)
# MappingView, Sized and Container get error.

print(v|v)
# MappingView, Collection, Sized, Container and Iterable get error.
Enter fullscreen mode Exit fullscreen mode

<iterator>:

from collections.abc import Iterator, Iterable

v: Iterator[int] = iter([0, 1, 2, 3, 4])
# v: Iterable[int] = iter([0, 1, 2, 3, 4])

print(v)
print(*v)
# No error
Enter fullscreen mode Exit fullscreen mode

<generator>:

from collections.abc import Generator, Iterator, Iterable

v: Generator[int] = (x for x in range(5))
# v: Iterator[int] = (x for x in range(5))
# v: Iterable[int] = (x for x in range(5))

print(v)
print(*v)
# No error
Enter fullscreen mode Exit fullscreen mode

<str>:

from collections.abc import (
    Hashable, Sequence, Reversible, Collection, Sized, Container, Iterable
)

v: str = '01234'
# v: Hashable = '01234'
# v: Sequence[str] = '01234'
# v: Reversible[str] = '01234'
# v: Collection[str] = '01234'
# v: Sized = '01234'
# v: Container[str] = '01234'
# v: Iterable[str] = '01234'

print(v)
# No error

print(v[0], v[1:3])
# Hashable, Reversible, Collection,
# Sized, Container and Iterable get error.

print(*v)
# Hashable, Sized and Container get error.

print(v+v)
# Hashable, Sequence, Reversible, Collection,
# Sized, Container and Iterable get error.
Enter fullscreen mode Exit fullscreen mode

<bytes>:

from collections.abc import (
    Hashable, Sequence, Reversible, Collection, Sized, Container, Iterable
)

v: bytes = b'01234'
# v: Hashable = b'01234'
# v: Sequence[int] = b'01234'
# v: Reversible[int] = b'01234'
# v: Collection[int] = b'01234'
# v: Sized = b'01234'
# v: Container[int] = b'01234'
# v: Iterable[int] = b'01234'

print(v)
# No error

print(v[0], v[1:3])
# Hashable, Reversible, Collection, Sized,
# Container and Iterable get error.

print(*v)
# Hashable, Sized and Container get error.

print(v+v)
# Hashable, Sequence, Reversible, Collection,
# Sized, Container and Iterable.
Enter fullscreen mode Exit fullscreen mode

<bytearray>:

from collections.abc import (
    MutableSequence, Sequence, Reversible,
    Collection, Sized, Container, Iterable
)

v: bytearray = bytearray(b'01234')
# v: MutableSequence[int] = bytearray(b'01234')
# v: Sequence[int] = bytearray(b'01234')
# v: Reversible[int] = bytearray(b'01234')
# v: Collection[int] = bytearray(b'01234')
# v: Sized = bytearray(b'01234')
# v: Container[int] = bytearray(b'01234')
# v: Iterable[int] = bytearray(b'01234')

print(v)
# No error

print(v[0], v[1:3])
# Reversible, Collection, Sized, Container and Iterable get error.

print(*v)
# Sized and Container gets error.

print(v+v)
# MutableSequence, Sequence, Reversible, Collection,
# Sized, Container and Iterable get error.
Enter fullscreen mode Exit fullscreen mode

<range>:

from collections.abc import (
    Hashable, Sequence, Reversible, Collection, Sized, Container, Iterable
)

v: range = range(5)
# v: Hashable = range(5)
# v: Sequence[int] = range(5)
# v: Reversible[int] = range(5)
# v: Collection[int] = range(5)
# v: Sized = range(5)
# v: Container[int] = range(5)
# v: Iterable[int] = range(5)

print(v)
# No error

print(v[0], v[1:3])
# Hashable, Reversible, Collection,
# Sized, Container and Iterable get error.

print(*v)
# Hashable, Sized and Container get error.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)