Python: NewType против TypeAlias. Декомпозиция типов

  Рет қаралды 19,492

Диджитализируй!

Диджитализируй!

Күн бұрын

Поговорим о декомпозиции типов в Python, а также о TypeAlias и NewType!
0:00 Об чём речь
1:12 Декомпозиция
2:25 typing.TypeAlias
4:08 Для чего TypeAlias?
5:36 typing.NewType
10:06 Использовать TypeAlias или NewType?
Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб:
t.me/t0digital/528
botanim.to.digital/
botanim_to_digital_bot.t.me/
Telegram - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...

Пікірлер: 118
@fantasy3469
@fantasy3469 Жыл бұрын
Мне очень нравятся вот такие короткие ролики, по делу, без воды и очень очень прикладные! Спасибо, Алексей!
@stupid-face
@stupid-face Жыл бұрын
Отличное изложение материала, очень полезная инфа! Спасибо Леха :)
@user-ku4iu3ed9n
@user-ku4iu3ed9n Жыл бұрын
Огонь, как всегда четко, лаконично, понятно и приятно смонтировано) спасибо!
@user-vc2nf9cv8b
@user-vc2nf9cv8b Жыл бұрын
Прекрасный ролик мини-лекция, спасибо!)
@worldfree1190
@worldfree1190 Жыл бұрын
Вау, не разу о таком не слышал. Очень классная информация. Спасибо!
@mansur.gabidullin
@mansur.gabidullin 6 ай бұрын
Спасибо за видео!
@stanislavserov8622
@stanislavserov8622 Жыл бұрын
Автор, ты не поверишь, но первый раз в жизни мне кто-то нормально и просто объяснил что такое декомпозиция на примере программы. Обычно в книгах это абстрактный термин. Думаю твоя подача материала позволяет расслабиться и по человечески воспринимать инфу :) Благодарю и успехов в развитии канала!
@t0digital
@t0digital Жыл бұрын
О, отлично! Рад, что нашли полезное:)
@stanislavserov8622
@stanislavserov8622 Жыл бұрын
@@t0digital ещё хотел предложить идею для канала. Делать код ревью каких-то небольших или средних программ, разбирая как все работает, почему сделано так или иначе, для самых маленьких вобщем, у кого нет опыта.
@t0digital
@t0digital Жыл бұрын
@@stanislavserov8622 да, у меня тоже была такая идея, делал обзор кода loguru, есть на канале. Всё хочу продолжить, но ресурсоёмкая затея:)
@stanislavserov8622
@stanislavserov8622 Жыл бұрын
@@t0digital мне бы очень помогли такие видео. Ведь есть путь самому разбираться в коде - это долго и сложно и есть путь что кто-то расскажет и покажет, так в общем интереснее даже. Ну если будут такие новые видео, буду рад )
@user-13520sdf
@user-13520sdf Жыл бұрын
Пользуюсь давно и не думал, что это тема отдельного видео)
@muhlymak
@muhlymak Жыл бұрын
Алексей, даешь больше видосов по данной книге! мне кажется там столько информации что можно каждый день видосы пилить 😁
@Gabriel-hg7fl
@Gabriel-hg7fl Жыл бұрын
Плююююс! Обязательно когда будут мани оформлюсь в книжный клуб, а пока остаётся надеяться на большее количество видосов по книжке))
@tigranrostomyan9231
@tigranrostomyan9231 Жыл бұрын
Согласен полностью!!
@matthewsantoro5135
@matthewsantoro5135 Жыл бұрын
Так а почему вы не купите и не начнёте её читать ?
@Gabriel-hg7fl
@Gabriel-hg7fl Жыл бұрын
@@matthewsantoro5135 уже прочитал по большей части. Но хотелось бы именно комментарии услышать, обсудить с ребятами, которые шарят. Иначе оно и запоминается хуже и прикладное значение меньшее имеет.
@ibragiminc8741
@ibragiminc8741 Жыл бұрын
оо новый формат, классно!
@mtigames188
@mtigames188 Жыл бұрын
Круто. Спасибо!
@yodapunishes
@yodapunishes Жыл бұрын
А в чем преимущество NewType перед прямым наследованием? class Rub(Decimal): ...
@user-sf3vd8gr5x
@user-sf3vd8gr5x Жыл бұрын
Кода меньше, и он чище. class Rub(Decimal): pass class Usd(Decimal): pass Выглядит как-то более громоздко и уныло... Уныло, потому что сразу в чужом коде не поймёшь, зачем это тут вообще,. Два бессмысленных пустых класса. А пример из видео, кроме всего прочего, сразу говорит о назначении кода и более изящен.
@user-bw5in2yo7s
@user-bw5in2yo7s Жыл бұрын
Пушка-гонка!
@qurke5139
@qurke5139 Жыл бұрын
Лучший!
@user-pi3qm7il2m
@user-pi3qm7il2m Жыл бұрын
Как всегда огонь, спасибо за видео! Интересно не будет ли удобнее использовать dataclass и Enum для улучшения читаемости вместо создания TypeAlias и NewType? Сложные вложенные структуры реализовывать через dataclass/pydantic, пример с валютами сделать через Enum.
@dmitrijf6337
@dmitrijf6337 Жыл бұрын
А как всё-таки можно с помощью NewType сделать валидацию значения? Например, чтобы валидными были только значения больше 0?
@lellel5521
@lellel5521 Жыл бұрын
С помощью классов)
@dmitrijf6337
@dmitrijf6337 Жыл бұрын
Тогда почему сразу не указывать этот кастомный класс в type hinting? Зачем "посредник" в виде NewType?
@limonred5283
@limonred5283 Жыл бұрын
Спасибо, четенько, держишь марку.
@user-qc8xe9ie8z
@user-qc8xe9ie8z Жыл бұрын
Для typing.NewType также можно применять следующий прием: создать функцию, которая принимает входящие данные и валидирует их (например, что Decimal не меньше нуля) и рядом с объявлением этого типа оставить коммент, что получить этот тип можно в вышеописанной функции. Ссылки на pastebin в комментах к 8 главе оставил
@user-rd4be1wk2j
@user-rd4be1wk2j Жыл бұрын
Я узнал про: 1) TypeAlias, 2) NewType 3) что я дорогой друг))
@t0digital
@t0digital Жыл бұрын
Отлично:)!
@TheDeatgod
@TheDeatgod Жыл бұрын
Отличное видео! Но данный микрофон очень чувствительный и ловит все "взрывные согласные". Для понижения давления на мембрану микрофона, советую приобрести попфильтр либо отодвинуть микрофон.
@sergey8513
@sergey8513 2 ай бұрын
Было бы хорошо еще про TypeVar узнать в этом видео
@anton_medvedev_it_life
@anton_medvedev_it_life Жыл бұрын
Алексей, подскажи, сколько у тебя уходит времени на 1 ролик? Я смотрю ты серьезно готовишься. У тебя уже презы пошли :)) Монтажишь сам или есть монтажер? Представляю сколько работы в таком 11 минутном ролике )) Благодарю кстати, за него
@t0digital
@t0digital Жыл бұрын
С появлением книжного клуба количество видео материалов возросло очень сильно (там пачками видосы идут) и теперь коллега помогает с монтажом. такой ролик это суммарно около дня работы - подготовка сценария/презы, съёмка, монтаж, подготовка звука, обложка, тайм коды
@footballshorts1984
@footballshorts1984 Жыл бұрын
Красота ! Но все же, типизация типов с TypeAlias кажется избыточным, не исключаю что через пару версий питона TypeAlias будет задепрекейчен и будем просто писать type_alias = int | str.
@vanya909
@vanya909 Жыл бұрын
Не совсем понятно что имелось в виду. Так и сейчас можно писать
@archie400
@archie400 Жыл бұрын
Привет, звук микрофона очень крутой, мягкий. Прям ляпота! Но очень сильно выделяется эхо, которое режет слух. Возможно это только я в своих наушниках заметил, но вот пишу так сказать отзыв на звук. А так все круто)
@SemyonKalyakulin
@SemyonKalyakulin Жыл бұрын
А использование TypeAlias не портит изначальное назначение хинтингов, т.е. указывать на тип возвращаемого/принимаемого значения? С алиасом мы закрываем тип величины, но говорим, что из себя представляет эта величина (а блин функцию по идее выполняет правильный нейминг переменных)
@user-wf9xf8py2x
@user-wf9xf8py2x Жыл бұрын
А что за цветовая схема vim у автора?
@jamjam3337
@jamjam3337 Жыл бұрын
👏👍
@AlexandrSpirit
@AlexandrSpirit Жыл бұрын
Раньше если объект принимал типа None и например str, нужно было использовать Optional[str, None]. Теперь можно str | None. Где нужно использовать Optional или он больше не требуется?
@t0digital
@t0digital Жыл бұрын
Если проект работает на актуальной версии пайтона, то опшнл больше не нужен
@AlexandrSpirit
@AlexandrSpirit Жыл бұрын
@@t0digital На актуальной. Спасибо.
@greeshanka8283
@greeshanka8283 Жыл бұрын
было бы неплохо разыграть эту книжку, когда вы её дочитаете в клубе. Стоит она сейчас космических денег, если честно. Я бы вот нереально обрадовался, если выиграл её. Хоть кому-то повезёт)
@mateo1.1
@mateo1.1 Жыл бұрын
[На заметку видеомэйкера] 5:58 - "Just a kind of magic" полюбившееся словосочетание в ваших видосах. Но в некоторых местах оно начинает звучать неуместно. Спасиобо за coding-просвещение.
@t0digital
@t0digital Жыл бұрын
Почему неуместно:)?
@andrewbondaryuk
@andrewbondaryuk Жыл бұрын
Спасибо за объяснение. P.S. Прикольно. 2023 год в команде python открыли доменные типы, которые существовали в Оракле с махровых времён 😀
@gnompirogov9259
@gnompirogov9259 Жыл бұрын
Гранд мерси, полезно, интересно
@uicodeuz
@uicodeuz Жыл бұрын
Кайф
@kelevra1493
@kelevra1493 Жыл бұрын
Что за часы на руке? Модель?
@t0digital
@t0digital Жыл бұрын
Panerai PAM512
@kelevra1493
@kelevra1493 Жыл бұрын
@@t0digital Нормас
@fedorindoukaev3361
@fedorindoukaev3361 Жыл бұрын
В первый раз, дорогие друзья, встречаю "дорогие друзья" в качестве словосочетания-паразита, дорогие друзья! А за видео лайк, коротко, ясно, полезно, дорогие друзья!
@VGCor
@VGCor Жыл бұрын
Всё дело в замечательном сочетании звуков д и р вначале слов 😅
@t0digital
@t0digital Жыл бұрын
Не считаю это словом-паразитом, дорогие друзья!
@VGCor
@VGCor Жыл бұрын
​@@t0digital Тоже не считаю это словом-паразитом. Всё дело в том, что это словосочетание-паразит 😁
@t0digital
@t0digital Жыл бұрын
@@VGCor от оно ж как)))
@andreiosipov2766
@andreiosipov2766 Жыл бұрын
А ведь псевдонимы типов можно создавать без явной аннотации "TypeAlias"? Просто "SomeType = TypeA | TypeB"?
@IT_T_
@IT_T_ Жыл бұрын
Нет, получится присваивание к переменной а не к типу
@idoodl
@idoodl Жыл бұрын
Мне тоже так кажется. Коммент выше не понял.
@VGCor
@VGCor Жыл бұрын
@@IT_T_ так в чём разница? Переменной в Пайтон можно присвоить любое значение. К тому же в видосе про типизированный Пайтон Алексей указывал Celsius = int для градусов цельсия.
@Stor_Man
@Stor_Man Жыл бұрын
Что ты думаешь о WSL?
@t0digital
@t0digital Жыл бұрын
Он хорош, рад, что оно есть на винде
@nateriver8261
@nateriver8261 Жыл бұрын
А какого года издание этой книги?
@t0digital
@t0digital Жыл бұрын
2022, если не ошибаюсь. Второе издание, это важно, там много нового по сравнению с первым
@nateriver8261
@nateriver8261 Жыл бұрын
@@t0digital спасибо, а то читал первое 2016 года и там, разумеется, этих тем еще не было
@rexby
@rexby Жыл бұрын
Никогда так не делал. Ну что ж. Надо когда-то начинать 🤷. Первый!
@koteichpiterlive4750
@koteichpiterlive4750 Жыл бұрын
Сними что небуть про Codon
@lellel5521
@lellel5521 Жыл бұрын
Не понял немного смысла в NewType, модели на основе классов, как будто бы выглядят более удобными и все проверки внутри классов можно хранить
@dmitrysavin9304
@dmitrysavin9304 Жыл бұрын
так зачем всё-таки нужен TypeAlias? почему не написать просто `UserNameToId = Mapping[str, int]`
@valeriichirkov9207
@valeriichirkov9207 Жыл бұрын
Просто такое же типизирование как и number: int = 0
@yodapunishes
@yodapunishes Жыл бұрын
Видимо чисто как подсказка тайп чекеру, что этот тип объявлен только для типизации и не будет использоваться в рантайме
@user-us7eb8bi9l
@user-us7eb8bi9l Жыл бұрын
Как-то мимо меня прошёл момент, когда Python стал выкатывать ошибки типов на основании хинтингов. Как же утиная типизация и вот это вот всё?
@t0digital
@t0digital Жыл бұрын
Ошибки катит внешний тайп чекер, не интерпретатор
@fannigurt
@fannigurt Жыл бұрын
идентификаторы прекрасно могут быть отрицательными, например у телеги есть отрицательные айдишники пользователей
@t0digital
@t0digital Жыл бұрын
Единственный знакомый мне инструмент, кто так делает. И вангую, что это искусственно добавляемый знак минус, которого нет в хранилище.
@ruslangabitov5202
@ruslangabitov5202 Жыл бұрын
Спасибо за видео. Тяжело назвать эту шнягу полезной. Опять лишнее увеличение сложности изначально красивого и простого языка. Налицо отсутствие целостного подхода. Зачем вводить эти новые слова, когда есть понятие класса? Приведённый пример с валютам будет красивее и более контролируемо реализован на классах.
@t0digital
@t0digital Жыл бұрын
Аннотации типов остаются опциональным в языке, вообще можно ими не пользоваться, если кодовая база маленькая и это какой-то для себя проект. Полноценные классы, определенные через class, для валют, конечно, можно ввести, если в этом есть смысл, если там будет что-то дополнительное, какие-то свои методы, например. Но не всегда это оправдано. Разные языковые конструкции показывают разное назначение строк кода. Объявление класса - значит тут может быть своя логика в нем. А NewType это просто новый тип, чисто для задач типизации. Язык программирования это же язык. Как много оттенков в обычном, например, русском языке. Вроде слово и синоним другого слова, а если разобраться, то несёт какой-то иной оттенок, иной несколько смысл, иной окрас, иную цель
@ruslangabitov5202
@ruslangabitov5202 Жыл бұрын
@@t0digital, в отличии от разговорных языков, введение новых конструктов в языки программирования всегда имеют цену. Чем мы платим за этот "сахарок", дублирующий уже существующие концепции? Жиром программ и жиром мозгов программистов, которые из-за избытка возможностей перестают думать об эффективности, понятности и наглядности своих программ. Когда вижу нововведения, анализирую их, как минимум, с двух сторон: 1) можно ли реализовать это нововведение существующими в языке механизмами, 2) насколько станет труд программиста, тестировщика и будущей поддержки написанных программ более легче, быстрее, надежнее. Если ответ на эти вопросы получается, как вы сказали, просто в оттенках, то нововведение смысла не имеет.
@markervictor
@markervictor Жыл бұрын
Разве при NewType нельзя уже сам тип использовать вместо Decimal и вызывать его собственный конструктор, а не передавать в него объект Decimal?
@markervictor
@markervictor Жыл бұрын
Типа Rub('80.0'), а не Rub(Decimal('80.0'))
@t0digital
@t0digital Жыл бұрын
не понял вопрос
@t0digital
@t0digital Жыл бұрын
а, нет, так не работает
@markervictor
@markervictor Жыл бұрын
Аа, заблуждался, потому что передавал туда литералы обычно, и выглядело будто это прямо тип, а не просто функция, возвращающая аргумент. Спасибо! Действительно удобно, если есть необходимость манипулировать литералами разных типов, которые на самом деле являются одним типом.
@FunInstinct
@FunInstinct Жыл бұрын
Можно, конечно.
@JDM239
@JDM239 Жыл бұрын
Не знаю, мне до сих пор типизация в питоне кажется чужеродной(хотя и стало лучше) Если мне нужно типизация я дотнет лучше возьму:)
@banzaika
@banzaika Жыл бұрын
Гггоднота, нннаверноее!
@t0digital
@t0digital Жыл бұрын
скорее всего да!
@walterwhite4407
@walterwhite4407 Жыл бұрын
man,ты гониш
@t0digital
@t0digital Жыл бұрын
Нет не гониш
@itzlaboratory
@itzlaboratory Жыл бұрын
Господа, а чем MyType = Dict[str, str] хуже чем MyType: TypeAlias = Dict[str, str] ?
@t0digital
@t0digital Жыл бұрын
Чтобы явно показать, что это алиас типа. PEP 613, если интересно подробнее
@simongolovinskiy2959
@simongolovinskiy2959 Жыл бұрын
Не понимаю, для чего нужна такая подробная аннотация, тоже эту книжку читаю. Не могу переварить всю главу аннотаций. Вроде, и без них норм
@MrLotrus
@MrLotrus Жыл бұрын
Чтобы в сложном проекте количество ошибок уменьшить.
@user-jn4cq9dy3f
@user-jn4cq9dy3f Жыл бұрын
Близок тот момент, когда ошибки типа начнут валиться на промежуточной компиляции, чтобы в байткод никакой откровенной ереси не попало... И тогда даже самые ленивые (вроде меня) начнут использовать тайпхинтинг. ;-)
@t0digital
@t0digital Жыл бұрын
Гвидо обещает, что аннотации типов всегда будут опциональными в питоне:)
@andrewbondaryuk
@andrewbondaryuk Жыл бұрын
@@t0digital Жаль. Почему не ввести флаг striсt совершенно не понятно :(
@overblaze240
@overblaze240 Жыл бұрын
Typescript в питоне) прикольно
@MrSmallChe
@MrSmallChe Жыл бұрын
жабаскрипт головного мозга
@karetro9718
@karetro9718 Ай бұрын
В телеграмм используются отрицательные идентификаторы для групп. Так что пример был не совсем корректный.
@t0digital
@t0digital Ай бұрын
Не факт, что идентификаторы _хранятся_ как отрицательные числа. Использование в API отрицательных чисел может позволять в самом API разделять сущности.
@karetro9718
@karetro9718 Ай бұрын
@@t0digital В любом случае при работе с API телеграмма мы имеем дело с отрицательными идентификаторами. Как у них это в базе данных хранится - это дело третье. Для нас-то это все равно идентификаторы, и они - отрицательные числа. Общий смысл ролика понятен, и пример тоже. Не хотелось душнить, просто решил заметить, что всегда отметать отрицательные числа в идентификаторах это неправильно, это может зависеть от ситуации) В любом случае большое спасибо вам за уроки по Python и не только. Всегда ждем с нетерпением. Жаль, что в последнее время редко контентом балуете.
@user-vo2fq6my8x
@user-vo2fq6my8x Жыл бұрын
"Python: к вершинам мастерства" - полезная книга?
@t0digital
@t0digital Жыл бұрын
Да. Книга отличная. Но не в качестве первой книги по питону
@MIRAMAXED
@MIRAMAXED Жыл бұрын
Аннотации типов в том виде, в котором их сейчас активно используют, нарушают первый принцип: Beautiful is better than ugly. Нет ничего плохого в типизации как таковой, но это всё нужно выносить в docstring. ИМХО.
@t0digital
@t0digital Жыл бұрын
Да все что угодно можно назвать ugly
@MIRAMAXED
@MIRAMAXED Жыл бұрын
@@t0digital Всё что угодно, кроме beautiful :D
@t0digital
@t0digital Жыл бұрын
Да весь пайтон ugly. И дзен его ugly
@MIRAMAXED
@MIRAMAXED Жыл бұрын
@@t0digital Где-то тихо грустит Гвидо ван Россум :D
@alexanderkorshkov1904
@alexanderkorshkov1904 Жыл бұрын
3:40 "...хотелось бы вот этот мэппинг кудв-нибудь упаковать и не повторять..." Предлагаю - упаковать и выкинуть из кода нафиг вообще :) Опишите лучше в док-стринге что это за аргумент, чем может быть и зачем нужен. Аннотации никак не заменяют комментарии. На всякий случай - не объясняйте мне, чем хороша строгая типизация. Я начинал программировать на с и плюсах; сам могу объяснить. И когда знакомился с питоном очень удивлялся - как же они, бедняги, типы не указывают? Оказалось, что замечательно без этого обходятся. Практически никогда аннотации не помогали мне читать код, только загромождают его.
@shurko
@shurko Жыл бұрын
Как интересно. Они помогают не читать код, а писать его или рефакторить. Не насажать ошибок пока пишешь. Нет, не замечательно обходятся. Собственно типизация и приходит туда, потому что не обходятся.
@hoopengo2289
@hoopengo2289 Жыл бұрын
сложнаааааа😅
@koteich_live
@koteich_live Жыл бұрын
эта что за годната то такая.......
@karandalliik
@karandalliik Жыл бұрын
Эльвис воскрес?) Да) совсем недавно, решил первый раз очень объемную задачу сначала функционально, а потом все переписал под python oop - вышло четыре рабочих класса на 4к строк, примерно. Очень весело делать такую декомпозицию и каждый день баги искать) Интересная, конечно, тема типов. Пока, только входящие значения проставляю уже часто; удобно видеть на простыне что поступает на вход; а вот с возвратом с метода не всегда вижу пользу. В общем польза есть и в неожиданный момент idle подскажет, что чушь начала происходить и именно и благодаря типам) Вот так вспоминаю себя, 1-2 года назад, когдавообще ни хера ничего толком не знал, и думал: 'что же за ебанько придумал все это?' А щас уже поримаю и все клево помагает. А ведь еще очень, очень много впереди выучить что есть) Код каждый день становится все изящнее, идеальнее!) А к NewType еще несколько методов валидации написать , для страховки))) пока, не понимаю эту тему.
@t0digital
@t0digital Жыл бұрын
Ну просто не допускайте баги - и тогда не надо будет их искать! + типизация, автотесты:)
@karandalliik
@karandalliik Жыл бұрын
​@@t0digital Спасибо. Было все равно интересно очень. По багам в прошлой задаче ничего не буду рассказывать. Там было серое задание и просто каждый день совершенствовал код по мелочи и искал некоторые зависапия в безконечных циклах, большую часть решил. 5 недель это все продолжалось. В день 8-14 часов проводил у кода) и это с двумя тренировками, иногда, в день. Рассказать все можно уже не кодом, а еще целой простыней) Уверен, у вас и своих таких хватает. А вот за тесты пора тоже браться. Еще ни разу эту тему не трогал.
Всё об исключениях и работе с ними в Python
30:34
Диджитализируй!
Рет қаралды 48 М.
They RUINED Everything! 😢
00:31
Carter Sharer
Рет қаралды 11 МЛН
ДЕНЬ РОЖДЕНИЯ БАБУШКИ #shorts
00:19
Паша Осадчий
Рет қаралды 6 МЛН
He tried to save his parking spot, instant karma
00:28
Zach King
Рет қаралды 18 МЛН
WHY IS A CAR MORE EXPENSIVE THAN A GIRL?
00:37
Levsob
Рет қаралды 17 МЛН
Управление знаниями с помощью Obsidian. Дмитрий Лаухин, Дима Черненьков
1:38:24
Ассоциация ориентированных на решение практиков
Рет қаралды 2,9 М.
Python 3.12 Generic Types Explained
18:27
ArjanCodes
Рет қаралды 56 М.
Haproxy + pgbouncer и PostgreSQL
2:00
Видеоблог Аристова Евгения
Рет қаралды 105
Как бы я учил программирование сейчас?
7:17
Саша Лукин
Рет қаралды 349 М.
Python Has A NewType That No One Is Using?
4:24
Indently
Рет қаралды 45 М.
10 признаков того, что вы новичок в Python
4:59
They RUINED Everything! 😢
00:31
Carter Sharer
Рет қаралды 11 МЛН