Сообщить об ошибке.

Аннотация динамических типов typing.Any в Python

Специальный тип typing.Any, указывает на неограниченный тип (т. е. динамический тип). Не поддерживает синтаксис [].

Для этого типа верны утверждения:

  • любой тип совместим с typing.Any;
  • тип typing.Any совместим со всеми типами.

Это означает, что можно выполнить любую операцию или вызов метода для значения типа typing.Any и присвоить его любой переменной:

from typing import Any

# переменная `a` динамически 
# изменяет свой тип 
a = None    # type: Any
a = []      # проверка типа -> OK
a = 2       # проверка типа -> OK

s = ''      # type: str
s = a       # проверка типов выполняться не будет!

def foo(item: Any) -> int:
    # Проверка типа: 'item' может быть 
    # любого типа, и этот тип может 
    # иметь метод 'bar'
    item.bar()
    ...

При присвоении значения типа typing.Any более точному типу, проверка типов выполняться не будет. Например, средство проверки аннотаций не будет сообщать об ошибке при присвоении a параметру s, даже если s был объявлен как имеющий тип str и получил значение int во время выполнения!

Изменено в Python 3.11: Специальный тип typing.Any теперь можно использовать в качестве базового класса. Это может быть полезно для предотвращения ошибок проверки типов с классами, которые могут уклоняться от ввода в любом месте или являются высокодинамичными.