Пайтон язык с динамической типизацией. Объявляя переменные мы не обязаны указывать ее тип. Но, чтобы улучить читаемость кода и его поддержку, мы можем дополнительно делать аннотации типов. Аннотации не обрабатываются интерпритатором и никак не влияют на производительность

Аннотации для переменных пишут через двоеточие после идентификатора

price: int = 5

Параметры функции аннотируются так же как переменные, а возвращаемое значение указывается после стрелки ->и до завершающего двоеточия

**def indent_right(s: str, width: int) -> str:
    return " " * (max(0, width - len(s))) + s**

Если же функция никогда не возвращает управление (например, как sys.exit), следует использовать аннотацию NoReturn:

def forever() -> NoReturn:
    while True:
        pass

Для полей класса аннотации должны быть указаны явно при определении класса.

class Book:
    title: str
    author: str

    def __init__(self, title: str, author: str) -> None:
        self.title = title
        self.author = author

b: Book = Book(title='Fahrenheit 451', author='Bradbury')