Специальный тип 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
теперь можно использовать в качестве базового класса. Это может быть полезно для предотвращения ошибок проверки типов с классами, которые могут уклоняться от ввода в любом месте или являются высокодинамичными.