Классы данных Python сделают вас лучше | Принцип работы dataclass

Поділитися
Вставка
  • Опубліковано 14 січ 2025

КОМЕНТАРІ • 89

  • @zproger
    @zproger  2 роки тому +5

    Какие темы вы хотели бы увидеть на канале?

    • @weedlakmar4115
      @weedlakmar4115 2 роки тому +1

      Гайд по библиотеке Логуру:)
      +
      Думаю всем будет интересна настройка postgreSQL на сервере, как с ним работать, что ткет psql, pg_ctl. Сам до конца не разобрался 😅😂

    • @Oberst3001
      @Oberst3001 2 роки тому

      @@weedlakmar4115 а какой гайд по логуру нужен ? она же изи совсем

    • @n1ret
      @n1ret 2 роки тому

      @@Oberst3001 тут все гайды про лёгкие темы хаха

    • @interviewhelper551
      @interviewhelper551 2 роки тому +1

      Очень много слов паразитов, данный, далее и тд , очень мешает

    • @zproger
      @zproger  2 роки тому

      Работаю над этим, спасибо за подсказку

  • @posreadyxp3939
    @posreadyxp3939 2 роки тому +3

    Спасибо за видео, очень сильно ждал

    • @zproger
      @zproger  2 роки тому

      Пожалуйста :)

  • @pavel4385
    @pavel4385 2 роки тому +17

    по мне так правильнее было делать setattr(self.user, key, value), чем лезть в __dict__

  • @rostislavmalyshev1775
    @rostislavmalyshev1775 2 роки тому +8

    Досмотрел до конца, но так и не понял, что именно сэкономит мне часы... 10 строчек не очень понятного и корректного _(_dict_)_ кода вместо строчки словаря? А что бы другим понятно было, обычно комментарии к коду пишут. Практического применения даже в голову не приходит.

    • @zproger
      @zproger  2 роки тому +2

      Это была моя ошибка, что я забыл сказать, что именно сэкономит время. Тут дело в том, что реализовывая к примеру какой-то API, когда нужно будет общаться между разными устройствами, именно дата-классы могут служить как средство для передачи данных, которые удобно принимать именно по их типу. Пример как это делается был в видео о перечислениях (Enum), ну и также дата-классы могут служить как структура, в которой собираются данные для определенного объекта, например данные студента, тогда передавая эту структуру, сразу будет понятно кому именно она принадлежит и какие аргументы у неё есть.

    • @archyt88
      @archyt88 2 роки тому

      @@zproger интересное видео спасибо за труд

    • @rostislavmalyshev1775
      @rostislavmalyshev1775 2 роки тому +2

      ​@@zproger Да, для API это действительно подходит.

  • @ПавелВарежкин-н2я
    @ПавелВарежкин-н2я 2 роки тому +7

    Здравствуйте, такой вопрос, для чего это использовать? Почему просто не написать поля user и age в стандартном классе?

    • @zproger
      @zproger  2 роки тому

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

    • @n1ret
      @n1ret 2 роки тому +2

      @@zproger ну, а зачем второй то класс писать, в коде без проблем можно менять значения обращаясь к ним по имени

  • @mcomponent
    @mcomponent 2 роки тому +6

    Есть библиотека pydantic, она работает с Cython и намного быстрее, позволяет приводить типы, легко расширяемая.

    • @zproger
      @zproger  2 роки тому

      Крутая либа, но до неё руки ещё не дошли

  • @Borzoff
    @Borzoff 2 роки тому +3

    Крутые видео. Очень понятно объясняете!

    • @zproger
      @zproger  2 роки тому +2

      Спасибо!

  • @flueriexeflueriexe7040
    @flueriexeflueriexe7040 2 роки тому +1

    А видео хорошее, да, спасибо. Надеюсь Вы и дальше так будете делать контент

    • @zproger
      @zproger  2 роки тому

      Так и буду делать, спасибо за комментарий :)

  • @whoareyouqqq
    @whoareyouqqq 2 роки тому +12

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

    • @zproger
      @zproger  2 роки тому +2

      Ага, тут много таких приколов)) как и в любом языке

  • @grimma795
    @grimma795 2 роки тому +4

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

    • @lxmbdaemptiness209
      @lxmbdaemptiness209 2 роки тому +1

      А можно ссылочку на источник, где написано как использовать надо и не надо? Странные вы люди...

  • @n1ret
    @n1ret 2 роки тому +2

    как ты в терминале пишешь код используя классы и функции программы?

    • @zproger
      @zproger  2 роки тому

      Через IPython

    • @n1ret
      @n1ret 2 роки тому

      спасибо

  • @лопаоп
    @лопаоп 2 роки тому +1

    спасибо большое

    • @zproger
      @zproger  2 роки тому

      Пожалуйста :)

  • @non5309
    @non5309 2 роки тому +3

    Хм, есть мнение что обращение через __dict__ не очень хорошая практика. Не проще ли использовать методы гет атрибут

    • @zproger
      @zproger  2 роки тому

      Можно и гет сделать в принципе

  • @enrewardronkhall8340
    @enrewardronkhall8340 11 місяців тому +1

    Что значит "возможно не совсем правильно создавать экземпляр класса в другом классе-оболочке"? Т.е. вы не знаете можно так делать или нет с точки зрения практик программирования? И зачем тогда показывать то, что не нужно использовать в практике?

  • @latinic8674
    @latinic8674 2 роки тому +3

    Довольно интересная штука, возможно буду переписывать свои старые проекты с ооп. Кстати, а будут видео по c++?

    • @zproger
      @zproger  2 роки тому +5

      Возможно будут по Rust, так как его использую чаще плюсов

    • @zproger
      @zproger  2 роки тому +4

      А к чему мне рейтинги, я о себе говорю, что использую Rust чаще

    • @slaaneshblog6133
      @slaaneshblog6133 2 роки тому +1

      @@zproger жду видосов по Rust

    • @n1ret
      @n1ret 2 роки тому

      @@zproger а в чём его преимущества?

    • @vas_._sfer6157
      @vas_._sfer6157 2 роки тому

      @@n1ret Проще код писать. Меньше ошибок можно совершить, да и в целом он мощнее.

  • @ПавелВеткин-о6щ
    @ПавелВеткин-о6щ 2 роки тому +2

    TypeDict vs Dataclass ?

  • @Edward-y2h
    @Edward-y2h 2 роки тому +1

    Бро, мало контекста, в данном конкретном примере по сути только синтаксис, а для чего использовать именно dataclass не понятно.

  • @flueriexeflueriexe7040
    @flueriexeflueriexe7040 2 роки тому +5

    Здравствуйте, извините за опоздание, немного был занят, но я не забыл про Ваш канал. Спасибо большое за данное видео, отличное, мне очень понравилось! Вот только скажите, пожалуйста, вот эти ваши дата классы можно ли использовать при создании игры, где ты типа грибок и прыгаешь по супермарио? Что-то мне подсказывает, что можно и это даже будет полезно, но хотелось бы услышать Ваше мнение на этот счет, спасибо!

    • @zproger
      @zproger  2 роки тому

      Всё верно, вы в очередной раз идеально изучили материал из видео

  • @luckytima2315
    @luckytima2315 2 роки тому +1

    Спасибо за видео, можете сказать пожалуйста что за тема у вас в pycharm

    • @zproger
      @zproger  2 роки тому +1

      Material UI - Dracula

    • @luckytima2315
      @luckytima2315 2 роки тому

      @@zproger Спасибо )

  • @a.osethkin55
    @a.osethkin55 2 роки тому +3

    и чем дата-класс отличается от обычного? (читай, нафига его придумали, если уже такое есть).
    В целом, вспомнилось, что это обычная структура (если без методов) из Паскаля.. ну да, конечно, в питоне почти все есть объект, но сути это не меняет: структура - и в Африке структура..

  • @domochevsky4703
    @domochevsky4703 2 роки тому +1

    Нормально, бро, нормально.
    В чем видос монтируешь?

  • @habibub
    @habibub 2 роки тому +1

    Вообще есть метод setattr, а __dict__
    Непонятно для чего хендлер? Если нам юзера нужно представить в двох сущностях, то это две разных сущности и мы нарушаем атомарность. Если нам юзер нужно для двох разных сервисов то зачем на посредник? Ведь модель это только данные.

    • @deskentunhuman3336
      @deskentunhuman3336 2 роки тому

      Если ключа нет, то setattr молча его создаст, а __dict__ кинет исключение KeyError.

  • @Sasha-ub7pz
    @Sasha-ub7pz 2 роки тому +1

    Вспоминаю с ностальгией о питоне, даже не охота отписываться от канала... Когда-то я перешёл на джс и на долго (

    • @zproger
      @zproger  2 роки тому

      Сейчас только на жс работаете?

    • @Sasha-ub7pz
      @Sasha-ub7pz 2 роки тому +1

      @@zproger Да, по факту Питон только для нейронок и аналитики данных, в остальном жс круче.

    • @luckytima2315
      @luckytima2315 2 роки тому

      @@zproger У меня такая же тема, только работаю на java, python использую для подготовки учеников к ЕГЭ или олимпиадам(базовый уровень).Устал искать вакансий на джуна/стажера, на java за неделю нашел )

  • @flueriexeflueriexe7040
    @flueriexeflueriexe7040 2 роки тому +2

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

  • @kavaganga
    @kavaganga 2 роки тому

    Видео познавательное, спасибо. Единственный момент это раздражает фраза-паразит, звучащая через одно предложение "В данном случае" :)

    • @zproger
      @zproger  2 роки тому

      Понял, исправлю

  • @ДелайЧтоХочешь-о7д
    @ДелайЧтоХочешь-о7д 2 роки тому +1

    Лучший

    • @zproger
      @zproger  2 роки тому

      Благодарю, приятно

  • @АркадийМамонтов-д4г

    помаленьку может и освоить возможно, так как не поняв целостности картины этот пример как часть огромного пазла, но теперь и gpt поможет, видео полезное помогает в понимании, можно забить код в gpt и по задавать вопросы покажи примеры 🙄☺

  • @chekito
    @chekito Рік тому +1

    Как тема для PyCharm называется?

  • @jackmoral9127
    @jackmoral9127 2 роки тому +1

    не понял в чем прикол, а сразу user.name = [1,2] не канает?))

    • @zproger
      @zproger  2 роки тому

      Нет) В видео как раз об этом и говорится

    • @ЕвгенийВеснин-и1ц
      @ЕвгенийВеснин-и1ц 2 роки тому +1

      @@zproger почему? Вроде user.name=[1, 2] вполне сработает. Из видел как раз неясно зачем это. Метод реализован…

  • @mikhailsharaborin2871
    @mikhailsharaborin2871 2 роки тому +1

    Очень плохой пример в конце, где вы как раз таки должны были обрабатывать неправильные типы данных, name: str, а вы передаете в него list🤔
    + проговорить об аннотации типов, что они обязательны. И при реализации датаклассов убираем дублирование кода с методом __init__.
    И добавить обязательная неизменяемость.

  • @khachatur2000
    @khachatur2000 Рік тому

    Почему пишите в Pycharm а заускаете в ipython, скорее отсюда и нестыковка у меня. Как ни связаны между собой?
    AttributeError: 'UserHandle' object has no attribute 'user'
    ```
    from dataclasses import dataclass, asdict
    @dataclass
    class User:
    name: str
    age: int
    class UserHandle:
    def __int__(self, name, age):
    self.user = User(name, age)
    def get_dataclass(self):
    return asdict(self.user)
    a = UserHandle('Alex', 18)
    a.get_dataclass()
    ```

  • @Frost-IK
    @Frost-IK Рік тому

    Вы данном видео. Видео Вы подсказках. Перейдем Кы датаклассам. Кы данному модулю.

    • @zproger
      @zproger  Рік тому +1

      кы чему это?

  • @mrdixioner
    @mrdixioner 7 місяців тому

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

  • @АйратКаримов-м3п
    @АйратКаримов-м3п 2 роки тому +1

    посмотри еще pydantic - это еще круче

    • @zproger
      @zproger  2 роки тому

      Согласен, крутая штука

  • @KuradoKunio
    @KuradoKunio 2 роки тому +1

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

  • @whoiam7138
    @whoiam7138 2 роки тому

    Концепция похожа на POJO и DAO в JAVA

    • @zproger
      @zproger  2 роки тому

      Интересно это выглядит в Java)
      Мне как человеку, который не писал на этом языке,
      немного не привычно смотреть на такую структуру кода :)

  • @romanbush5164
    @romanbush5164 2 роки тому +1

    О прикол так можно структуры делать в питоне

  • @yuzu-dev
    @yuzu-dev 2 роки тому +1

    *Первый коммент* ПРИВЕТ!

    • @zproger
      @zproger  2 роки тому

      Привет :)

  • @enrewardronkhall8340
    @enrewardronkhall8340 11 місяців тому

    Дата класс это структура данных. И по вашему у структур данных не бывает методов? А что на счёт списков, словарей? либо вы не правильно объясняете что такое дата класс, либо вы не понимаете что такое дата класс и вводите в заблуждение. В любом случае не ясно что это такое и зачем использовать

  • @AlexandrSpirit
    @AlexandrSpirit 2 роки тому

    pydantic удобнее

  • @0xsadcat92
    @0xsadcat92 2 роки тому +1

    Чисто после изобретения костылей и велосипедов, обмотав изолентой получили ЭТО:
    struct User {
    string name;
    int age;
    };
    Целый модуль для получения обычной си-шной структуры?
    Простите... питон не легче си

    • @vas_._sfer6157
      @vas_._sfer6157 2 роки тому

      Это не структура, увы. Это сделано для того, чтобы сгенерировать сразу кучу методов, вроде сравнений, хеша превращения в строку и так далее. Это аналог @Data из джаваовского Loombok или котлиновского data class

  • @lexxkrt
    @lexxkrt 2 роки тому +2

    круто че, вместо того что написать а=1 мы пишем функцию set_a в котором пишем а=1