Size: a a a

2020 August 27

DB

Dima Boger in PiterPy Meetup
В исходном сообщении вопрос как аннотировать функцию, которая возвращает аннотацию типов)
источник

D

Dima in PiterPy Meetup
Достаточно прочитать про модуль typing на офиц сайте питона:)
источник

D

Dima in PiterPy Meetup
Или есть более крутые вещи?
источник

E

Eugene in PiterPy Meetup
Dima
Достаточно прочитать про модуль typing на офиц сайте питона:)
Где там написано как аннотировать аннотации?
источник

DB

Dima Boger in PiterPy Meetup
Dima
Достаточно прочитать про модуль typing на офиц сайте питона:)
Я всё ещё не понимаю к чему ты это всё 🤔

В официальной документации нет такого кейса как в вопросе выше
источник

D

Dima in PiterPy Meetup
аннотировать аннотации? Это как?
источник

DB

Dima Boger in PiterPy Meetup
Вот про это и вопрос)
источник

D

Dima in PiterPy Meetup
И зачем?
источник

D

Dima in PiterPy Meetup
Pycharm даже в бесплатной версии их подтягивает и выводит как на скрине
источник

D

Dima in PiterPy Meetup
Зачем аннотировать аннотации?
источник

D

Dima in PiterPy Meetup
Оо
источник

E

Eugene in PiterPy Meetup
Dima
И зачем?
Затем, что функция может возвращать аннотацию, которая вычисляется не в import time, а в зависимости от логики приложения. Я делаю, скажем, plugin based приложение и Union у меня может содержать разные типы, я не знаю какие именно, он формируется динамически. И этот Union скармливается в response model FastAPI приложения, который уже по этим данным с помощью pydantic валидирует запросы.
источник

E

Eugene in PiterPy Meetup
Это не для того, чтобы в pycharm типы выводились.
источник

D

Dima in PiterPy Meetup
Fast Api там все валидирует под OpenAPI
источник

E

Eugene in PiterPy Meetup
ResponseModel = Union[Response1Model, Response2Model]

у меня этот Union формируется динамически.
источник

E

Eugene in PiterPy Meetup
Dima
Fast Api там все валидирует под OpenAPI
Что ты хочешь этим сказать?
источник

E

Eugene in PiterPy Meetup
В OpenAPI есть oneOf, вот это как раз Union.
источник

Б

Боброний in PiterPy Meetup
Eugene
Type[List[str]]? :)
По идее, это не совсем то
источник

Б

Боброний in PiterPy Meetup
Но хорошо, если так работает
источник

E

Eugene in PiterPy Meetup
Боброний
Но хорошо, если так работает
Я через mypy не прогонял, мне просто стало интересно, есть ли из коробки механизм аннотировать аннотации, потому что аннотации могут определяться динамически, а не описываться статически в виде литералов. Тут, конечно, любой статический анализатор типов должен отвалиться там где аннотация не известна в момент анализа исходников.  Вот тут как раз и нужна аннотация для аннотаций. Чтобы анализатор посмотрел на возвращаемое значение той же функции и понял, что она возвращает аннотацию.

Немного ломает мозг эта новая мода, строить на аннотациях логику приложения, но не я это придумал. pydantic, fastapi через всё это и работают.
источник