LINUX.ORG.RU

Объясните про аннотации типов сложных объектов в Python

 


0

1

Вот например есть функция:

def test():
    # type() -> int
    return 1

все ок.

Но если:

from aiohttp import web
def test():
    return web.Response()

Как сделать аннотацию типов для этой функции ? Object ? Будет ли это корректно ?



Последнее исправление: Jopich1 (всего исправлений: 3)
from aiohttp import web
def test():
    # type() -> web.Response
    return web.Response()

А что такое «аннотация»?

Virtuos86 ★★★★★
()

Ну вызови же ты type() от возвращаемого значения

Crocodoom ★★★★★
()

Аннотация типов(а также всякие __slots__ и сотоварищи) в питоне это такая смешная палка о двух концах, потому что как только понимаешь ее нужность, сразу же понимаешь ненужность самого питона. Уже собственно твой вопрос это показывает, потому как в отличие от какой-нибудь Java, совершенно неочевидно что писать, надо лезть в сорцы библиотеки и смотреть, либо обильно гуглить(и это для такого простого кейса то!). [inb4, ответ будет def f() -> web.Response: ...]

Дело в том, что проекты размером больше нескольких тыщ строк кода - без аннотаций совершенно невозможно разрабатывать, будь у тебя в руках хоть PyCharm, хоть что угодно.

Одна из причин этому - то, что питон является скриптовой херотой, а не нормальным динамическим языком типа лиспов, смоллтолка или эрланга, где модель разработки заключается в том, что у тебя есть работающий «образ» программы, ты к нему в IDE подключаешься, IDE оттуда берет всю информацию, а также может прямо на ходу там что-то поменять и так далее.

Так как IDE в питоне никуда подключаться не могут, из-за того что питон является скриптовой херотой, единственный момент как-либо обрабатывать структуру языка в нормальном виде, это естественно, статический анализ. Тут и появляются аннотации типов.

И питон с ними превращается уже не в питон, а в какую-то убогую недо-джаву, да еще и глючную, потому что аннотации в питоне кривые, на них часто спотыкаются что mypy, что IDE, в рантайме они никаких гарантий не предоставляют, часто конфликтуют друг с другом безо всяких последствий, на динамических полях тупо ломаются, и так далее.

И тут возникает вопрос - а если мы пишем на какой-то тормознутой недо-джаве, обложеной указаниями типов аля List list = new List(), то нахрена нам вообще эта недо-джава, и не лучше ли взять джаву обычную? Или вон какой-нибудь C#? Финита ля комедия.

lovesan ★★
()
Ответ на: комментарий от WitcherGeralt

Потому что платформа .Net Core и язык C# в частности - на голову превосходит как устаревшие, ригидные и неудобные JVM и Java, так и говноподелия типа бидона и прочего похапе

lovesan ★★
()
Ответ на: комментарий от lovesan

Потому что платформа .Net Core и язык C# в частности - на голову превосходит как устаревшие, ригидные и неудобные JVM и Java, так и говноподелия типа бидона и прочего похапе

тут проблема в том, что никому не охота втыкать себе на комп ни net core, ни жабский рантайм, ради сомнительных поделий неизвестных авторов, что смело перешли с питона на оные «сильно типизированные» языки, что позволят им замахнуться на десятки тыщ непадучих строк.

alysnix ★★★
()
Ответ на: комментарий от alysnix

если вы пишите хелловорлды да еще и на предустановленных версиях питона(что уже смешно и уровень детсада - никто в реальности так не делает кроме хелловорлдов) - флаг в руки и барабан на шею.

но речь именно про серьезные проекты.

inb4 .net core позволяет «self-contained» программы делать, вплоть до линковки в единый бинарь

lovesan ★★
()
Последнее исправление: lovesan (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

С++ не подходят ни для чего, за редким исключением легаси, и возможно геймдева. Он не подходит для прикладного программирования потому что является переусложненным, кривым и внутренне противоречивым языком, да еще с ручным управлением памятью. Продуктивность разработчика на плюсах - на пару порядков ниже чем на любом C#. Результирующие программы на плюсах - кривое, тормозное и текущее памятью дерьмо.

lovesan ★★
()
Ответ на: комментарий от lovesan

От плюсов никуда не деться, на них слишком много написано, как и на питоне. А твою мелкомягкую копипасту джавы в линуксы совсем недавно завезли (не считая моноднище, которое кроме мелкоутят никому и не нужно было). Оно и не системное, и не скриптовое, и не родное в линуксах, а для гуёв есть Qt и Vala.

Итого, какое применение ты видишь у шарпов в никсах? Оно то же, что и у джавы, а от неё тоже никто не откажется по понятным причинам.

WitcherGeralt ★★
()
Ответ на: комментарий от lovesan

Ну, ок, давай так.

Оно и не системное, и не скриптовое, и не родное в линуксах, а для гуёв есть Qt и Vala

применение то же, что и у джавы, а от неё тоже никто не откажется по понятным причинам

И всё же, нафига?

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Сужу по своему опыту, порог вхождения сильно ниже.

Один небольшой .NET SDK устанавливается «в один клик» и не вызывает особых вопросов — можно сразу идти тыкать проекты и REPL, когда для GHC Platform нужно выкачать гигабайт чего-то, Cabal/Stack ещё пару компиляторов скачают (что в теории классно, так как воспроизводимость окружения, но приходится долго и нудно ждать, пока всё соберётся). Вызывает вопросы ситуация, когда Stack пишет, что тестируется под GHC 8.6, когда уже 8.8.

Поддержка мажорными IDE: официальные (ну, они указываются в документации) плагины для Visual Studio Code, JetBrains Rider. У Haskell есть крутой Haskell IDE Engine, но оно немного нетривиально для установки и настройки, учитывая, что я только начал знакомиться с инструментарием языка.

.NET здесь самое явное преимущество: готовые и протестированные библиотеки через интероп, поддержка в вещах типа ASP.NET. Практические советы вроде того же https://fsharpforfunandprofit.com. Веб-разработка: Fable/Elmish и новый Blazor, несколько опций для бекенда. Для десктопа Avalonia UI.

Вроде, всё, что заметил. Среда .NET мне показалась более дружелюбной и feature-full.

commagray ★★★★★
()
Ответ на: комментарий от commagray

.NET здесь самое явное преимущество: готовые и протестированные библиотеки через интероп, поддержка в вещах типа ASP.NET. Практические советы вроде того же https://fsharpforfunandprofit.com. Веб-разработка: Fable/Elmish и новый Blazor, несколько опций для бекенда. Для десктопа Avalonia UI

К линуксу это разве относится?

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Я бы в ином случае не смотрел бы на .NET, если бы оно не работало под Linux. 🤷

commagray ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.