Переменные и атрибуты

Переменные комментируются с помощью комментариев:

 x = 3  # type: int
x = negate(x)
x = 'a type-checker might catch this error'

 

Начиная с Python 3.6, есть также новый синтаксис для переменных аннотаций . Код выше может использовать форму

 x: int = 3

 

В отличие от комментариев, также можно просто добавить подсказку типа в переменную, которая не была ранее объявлена, без установки значения:

 y: int

 

Кроме того , если они используются в модуле или на уровне класса, намеки типа могут быть получены с помощью typing.get_type_hints(class_or_module) :

 class Foo:
    x: int
    y: str = 'abc'

print(typing.get_type_hints(Foo))
# ChainMap({'x': <class 'int'>, 'y': <class 'str'>}, {})

 

Кроме того , они могут быть доступны с помощью __annotations__ специальной переменной или атрибута:

 x: int
print(__annotations__)
# {'x': <class 'int'>}

class C:
    s: str
print(C.__annotations__)
# {'s': <class 'str'>}