LINUX.ORG.RU
ФорумTalks

Когда коту нечего делать - он добавляет проверку типов

 , , , pyrigth,


0

2

Понадобилось мне тут накидать небольшой CRUD, я по старой памяти рачехлил Flask,а заодно и решил донастроить neovim как Python IDE с помощью новомодных lsp/pyright/cmp. И тут же наступил ногами в жир:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy(app)

class User(db.Model):     ■ Expected type expression but received "type"
    id = db.Column(db.Integer, primary_key=True)

Гуглинг привел к issue к pyright, а оттуда и на подобную к mypy.

И вот что там пишет один бедолага:

I’m removing Flask-SQLAlchemy from my code entirely. I’ve moved most references of db.* to sa.* and sa.orm.* so I could get type checking. Next step: replacing db.Model with a custom base model, then db.session.

This has been a nightmare year with perfectly functional code falling apart every few months as various framework libraries refactor themselves to fit into the constraints of static typing.

Static type checking has been an excellent development for Python – it’s significantly reduced the need for test coverage of data types, or defensive code to evaluate function parameters – but it’s also shrunk the dynamic nature of Python to the subset recognised by type checkers. My project now has an average of five # type: ignore lines per Python file, and I’ve spent way too much time this year on (a) researching ways to make an idiom type-compatible, and (b) giving up and adding an ignore.

★★★★★
Ответ на: комментарий от bread

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

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

Чуть побольше чем на «предназначенных для веба» рубях

С каких пор руби стал «предназначенным для веба»? Никогда такая цель не декларировалась.

no-such-file ★★★★★
()

This has been a nightmare year

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

Syncro ★★★★★
()
Ответ на: комментарий от no-such-file

губи предназначен для гейсов, т.е. покупки мокбука и айфона, это давно всем известно

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

Ты про бото и прочие говнолибы?

Я пользовался питоновским API для yandex music, и когда заглядывал в исходники, мне казалось, что там грязные динамические трюки на каждом шагу происходят. Возможно это не так, и мне просто показалось, потому как с питоном знаком крайне поверхностно.

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

В любом случае непонятно зачем продолжают насиловать питон этот несчастный.

Так получилось, что в нем есть биндинги практически для всего. Ну и как «клей» для нативных либ очень хорошо подходит — весь ML на питоновом FFI по сути живет.

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

Поглядел код. Первое что бросилось в глаза - код явно писали до датаклассов а потом на них переводили уже постфактум. В таком да, вполне могут черти водиться

Посмотрел ещё немного. Код нормальный, чистый, хорошо документированный. Обвязка запросов очень похожа на результат swagger-codegen, возможно оно там когда-то было. Есть некоторые спорные точки типа логирования через декоратор и этой самой общей обвязки, но имхо это уже вкусовщина. Вот бото это правда пипос, там спек протокола из жсона парсится на каждую сессию. А здесь так, норм, чутка динамики и не более того

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

А про «попытку прикрутить гоночный мотор к изначально примитивному трёхколёсному велосипеду» я вычитал ЕМНИП в начале 90-х в Компьютерре, и уже не помню про что была эта аналогия.

Это наверняка про си плас плас.

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

Можно было вместо питона взять любой ЯП со статической типизацией. Причем, сделать это можно было хоть 30 лет назад ещё.

Тогда от питона было одно название. А «любых» языков со статикой было маловато. Опять бредишь 😄

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

Нет, что-то другое, куда более точное. А си – это ни хрена не трёхколёсный велосипед, по гоночно-моторности плюсам никак не уступает.

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

В плане RAD си это именно велосипед, и плюсы это попытка резко ускорить этот велик, чтобы от турбопитонов поменьше отставать.

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

Ну не 30, так 25 лет назад уже были языки на любой вкус. Питон стал известным только в начале нулевых. Уже и дотнет появился к тому времени. Но нет, будем на питоне писать мегабайты кода, а ещё через 15 лет изобретем статический анализ типов через аннотации и всех заставим этими костылями пользоваться. Это ли не бред?

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

Ну не 30, так 25 лет назад уже были языки на любой вкус. Питон стал известным только в начале нулевых. Уже и дотнет появился к тому времени.

Нет, это не так. Я начал писать на Python где-то в 1998-1999 году. Потому что уже пару-тройку лет пользовался Linux, ковырял вовсю системные скрипты, и меня очень заинтриговало, что много системных скриптов и утилит были написаны на Python. А для этого он уже должен быть несколько лет как популярен.

Python стал популярен в России где-то в конце 2000-х, начале 2010-х. Но во всём мире он стал популярен намного раньше, задолго до появления вендорлокнутого C#.

ещё через 15 лет изобретем статический анализ типов через аннотации и всех заставим этими костылями пользоваться. Это ли не бред?

Сейчас на Python написаны триллиарды строк кода. Многие из которых очень полезны и их нечем заменить в обозримом будущем.

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

Да, он выглядит инородно в Python. Да, он не идеален. Но другого способа решить проблему не вижу.

Остановить мир на 10-15 лет, чтобы переписать всё на другом языке?..

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

Сейчас на Python написаны триллиарды строк кода.

Ну да, и это какой-то сюр. Кто это писал, зачем? Теперь все страдают.

bread
()
Ответ на: комментарий от emorozov

на свалку триллиарды строк

Все равно придется это делать. Хотя бы перестали умножать это зло, и то хорошо.

bread
()
Ответ на: комментарий от emorozov

FastAPI, нет?

Потыкал его палочкой - да, выглядит как фреймворк здорового человека. Зачем мне его раньше не показывали?

Turbid ★★★★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)