Как стать автором
Обновить

Комментарии 9

Аннотации типов помогают делать очень интересные вещи. Довольно давно начал их активно использовать, но вот с TypeVar познакомился совсем недавно.
А еще аннотации можно использовать не только по прямому назначению — для типизации.

Например, они мне очень пригодились при построении одного из моих велосипедов — маппера из JSON в объекты Python. По началу я использовал для описания структур обычный dict, но пострадало удобство — IDE ничего не знает о полях соответствующих объектов. Привет опечатки и постоянное заглядывание в описания объектов. Тут-то на помощь и пришли аннотации и немного нестандартное их использование. И вуаля, IDE подсказывает мне поля и следит за их типами. Если кому интересно, могу рассказать подробнее.

Интересно! Рассказывайте

Пример с nan не воспроизвёлся:


>>> import math
>>> d = {}
>>> d[math.nan] = 1
>>> d[math.nan] = 2
>>> d
{nan: 2}
>>>

Да и вообще,


>>> math.nan is math.nan
True

ЧЯДНТ? Win10, Python 3.6

NaN — не синглтон, math.nan — это просто какой-то один экземпляр, можно легко получить другой. С помощью float('nan'), например.
По поводу аннотации для фабричного метода — c 3.7 можно использовать
from __future__ import annotations

И не придётся указывать TypeVar.

PEP563
А можно пример?
Вроде как-то так:
from __future__ import annotations
from typing import Type


class A:
    DATA = 42
    @classmethod
    def create(cls: Type[A]) -> A:
        print(cls.DATA)
        return cls()
Это позволяет не ставить кавычки вокруг 'A', но вообще никак не относится к описанной проблеме и TypeVar не заменяет.
Да, вроде понял, спасибо!
Зарегистрируйтесь на Хабре , чтобы оставить комментарий