Python OOP getters setters, decorator property, classmethod, staticmethod

Поделиться
HTML-код
  • Опубликовано: 4 июн 2024
  • Python OOP lesson in which we will consider getter and setter methods, encapsulation, property decorator, as well as classmethod and staticmethod decorators.
    And of course in the context, why is all this needed.
    00:00 Introduction, encapsulation in python
    03:20 attribute _slots_
    04:20 python getters setters
    08:03 decorator property and setter
    12:38 classmethod decorator
    18:09 staticmethod decorator
    Link to the code from the tutorial:
    gist.github.com/PythonHubStud...
    -------------------------------------------------- -------------------------------------------------- ----------------------------------------------
    Become a channel sponsor and you will get access to exclusive bonuses.
    More:
    / @pythonhubstudio
    -------------------------------------------------- -------------------------------------------------- ----------------------------------------------
    OOP course with the practice of writing a program:
    • Полный курс уроков обу...
    Telegram bot development course using an example project:
    • Playlist
    Subscribe to the channel! Ask questions in the comments!
    #PythonHubStudio
    #python

Комментарии • 127

  • @user-iq3cr3wj4i
    @user-iq3cr3wj4i 3 года назад +52

    Четко, постепенно. Без пропусков по причине "это классика бл№ть это знать надо". Классные уроки спасибо.

  • @MrEklair
    @MrEklair Год назад +8

    С каждым пройденным уроком я всё больше радуюсь, что нашёл этот канал. Даже если что то не понятно с первого раза, то ты хотя бы понимаешь, что просто не уловил и надо пересмотреть, а не лектор пытается привить тебе ненависть к программированию. Очень лаконично и хорошо подан материал, присоединяюсь к благодарностям! Выпускайте ещё лекций.

  • @nadyamoscow2461
    @nadyamoscow2461 3 года назад +51

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

    • @PythonHubStudio
      @PythonHubStudio  3 года назад +5

      Будут, но чуть позже

    • @shemyatin_konstantin
      @shemyatin_konstantin 10 месяцев назад +1

      ​@@PythonHubStudioспасибо за Ваш труд. Всё ещё планируется продолжение? Очень ждём))

  • @andreydr2861
    @andreydr2861 2 года назад +8

    И снова БИНГО! Реально все 3 урока просты в понимании, без замудреных терминов. Все прекрасно преподнесено, спасибо автору, приступаю к практике

  • @killa5159
    @killa5159 2 года назад +8

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

  • @user-lj1to7le9w
    @user-lj1to7le9w Год назад +2

    Это видео помогло мне понять суть данных декораторов. Хорошее объяснение с прекрасным примером.

  • @vinter_man
    @vinter_man 2 года назад +6

    Спасибо, это был очень качественный мини-курс. Однозначно, лайк, подписка и уважение+ )))

  • @user-ic3su6qh6k
    @user-ic3su6qh6k 3 года назад +4

    Спасибо за ваш труд. Наглядно, не спеша и не тараторя и все понятно. Большое спасибо.

  • @mihailbury240
    @mihailbury240 Год назад +2

    Спасибо за серию видео по ООП! После просмотра все уложилось в голове и стало значительно понятнее!

  • @msc_Noname
    @msc_Noname 2 года назад +1

    Впервые столкнулась с понятиями полиморфизма, инкапсуляции и многого другого на этих уроках. Вау!

  • @ivanlebedev7382
    @ivanlebedev7382 Год назад +1

    у Вас лучшие уроки по программированию из всех что я видел. большое спасибо!

  • @iliaplotnikov2167
    @iliaplotnikov2167 2 года назад +2

    Отличный урок, все понятно, а что не понятно - стало понятно по ходу видео. 👍

  • @gis6190
    @gis6190 2 года назад +5

    Очень хорошие уроки. Про перегрузку операторов тоже хотим.

  • @user-mk3ro9er9r
    @user-mk3ro9er9r Год назад +1

    Боже, спасибо что есть такие люди как Вы!

  • @EvgeniySakharov
    @EvgeniySakharov Год назад +2

    Отличный контент. Про перегрузку тоже надо знать. Запишите пожалуйста про перегрузку методов. Спасибо.

  • @01011968Desgner
    @01011968Desgner 3 года назад +2

    Круто сработано! Материал отлично зашел! Спасибо!

  • @grriimx
    @grriimx 2 года назад +1

    Круто. И посмеялся, и усвоил инфу которую не понимал. Лойс+подписка

  • @user-dp7sv9pj3f
    @user-dp7sv9pj3f 2 года назад +1

    Спасибо! Понятно, доступным языком!.

  • @otamurodmuminov188
    @otamurodmuminov188 3 года назад +1

    Отличный урок. Очень понравился

  • @user-oi1zl6de8i
    @user-oi1zl6de8i 2 года назад +2

    Автор - красаучег! Спасибо.

  • @felixcriminibusnulluseritd7315
    @felixcriminibusnulluseritd7315 3 года назад +2

    Подписчиков тебе в карму автор!! Очень качественный материал

  • @ruslanruslan338
    @ruslanruslan338 Год назад +1

    Отличный урок про ООП, все ясно и понятно

  • @railsabbitovich408
    @railsabbitovich408 3 года назад +9

    круто! ) Да , хотелось бы про дескрипторы))

  • @leonidgarnovskey9883
    @leonidgarnovskey9883 5 месяцев назад

    Спасибо за курс,прошел как базовый так и ооп благодаря автора ! больший ему респект)))

  • @godgive994
    @godgive994 Год назад +1

    Действительно годно.. Спасибо!

  • @brutsmart
    @brutsmart 2 года назад +1

    Спасибо за труд. Годное видео

  • @user-jq3fq8mb4o
    @user-jq3fq8mb4o 2 года назад +1

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

    • @antonpython8059
      @antonpython8059 Год назад

      как по мне все же нагляднее по старинке :
      get_a()
      set_a()

  • @vonmansfeld2244
    @vonmansfeld2244 2 года назад +2

    Отлично. Спасибо!

  • @user-og6bl3of5w
    @user-og6bl3of5w 2 года назад +2

    Спасибо большое! Лайк
    Про дескрипторы урок хотелось бы :]

  • @user-jx2bs3qt9y
    @user-jx2bs3qt9y Год назад +1

    Дай бог тебе здоровья!!!

  • @ElenaVi93
    @ElenaVi93 6 месяцев назад

    Спасибо за урок 👍🏼

  • @VladStone
    @VladStone Год назад +1

    урок бомба, спасибо огромное!

  • @iren__va
    @iren__va 3 года назад +2

    Класно пояснено!

  • @user-jm3dy9ms3u
    @user-jm3dy9ms3u Год назад +1

    отличный курс !

  • @kinoshka453
    @kinoshka453 5 месяцев назад

    Спасибо за курс

  • @user-ix7lb1sx4k
    @user-ix7lb1sx4k 3 года назад +2

    Здравствуйте. Зашел проголосовать за урок про декораторы.

  • @juliaweinstein3133
    @juliaweinstein3133 2 года назад +1

    Спасибо огромное!!

  • @evalinor
    @evalinor 2 года назад +10

    "Изменим значение констант" =) А так спасибо, очень хорошие уроки =)

    • @antonpython8059
      @antonpython8059 Год назад +1

      Да, это немного встряхнуло )

    • @shortvideos9955
      @shortvideos9955 Год назад +1

      Но это происходит только в праздничные дни, чтобы получить повышенный Level)

  • @serga8543
    @serga8543 Год назад +2

    спасибо за видео

  • @slavaseredenko4846
    @slavaseredenko4846 2 года назад +2

    Только вот начался этот урок и я услышал выражение "Это будет не по ПЕП". Хм, что такое ПЕП!? Нашел в интернетах статью об этом преславутом Пеп8. Прочитал, теперь знаю намного больше. Спасибо тебе за внимательность к деталям

    • @gob0
      @gob0 Год назад +1

      Увидел твой комментарий и решил посмотреть что такое Пеп8. Прочитал, теперь знаю намного больше. Лол)

  • @user-ek2gf5yt8u
    @user-ek2gf5yt8u 2 года назад +2

    спасибо за видео
    управился с тремя роликами по ооп примерно дней за 14
    но если напрячься можно и дней за 7

  • @dmiv2895
    @dmiv2895 2 года назад +1

    Конечно нужен урок

  • @user-rl7dv8qn7z
    @user-rl7dv8qn7z 3 года назад +4

    Голосую за перегрузку оператора!!!!

  • @symbol4572
    @symbol4572 3 года назад

    Спасибо!

  • @rostislavmalyshev1775
    @rostislavmalyshev1775 2 года назад

    Спаасибо!

  • @mr.vsadnik-__-5102
    @mr.vsadnik-__-5102 2 года назад +1

    Лучший!!!!

  • @marumer1464
    @marumer1464 2 года назад

    спасибо!

  • @Dallas1460
    @Dallas1460 Год назад

    Дякую за роботу та відео 👍🔥 а можна кайлі лінукс урок .

  • @user-xw3km1bv5o
    @user-xw3km1bv5o Год назад

    Спасибо за урок! декоратор классметод может работать внутри наследованного класса, изменяя родительский?

  • @msmesh5666
    @msmesh5666 2 года назад

    Доброго времени суток, скажите пожалуйста, есть ли ещё отличия декораторов @classmethod от @staticmethod, кроме написания и того, что метод класса работает с классом, а статистический с классом через свои параметры?

  • @user-ll5bj1rc6q
    @user-ll5bj1rc6q 3 года назад +4

    Добрый день. Только подписался на Ваш канал. Все четко, спасибо за информацию. Возможно у Вас есть видео про композицию в ООП, если неи, возможно ли записать такой ролик? Спасибо

    • @PythonHubStudio
      @PythonHubStudio  3 года назад +3

      Спасибо, нет, про композицию нет, скорее всего скоро сделаю, тема интересная.

    • @user-ll5bj1rc6q
      @user-ll5bj1rc6q 3 года назад +1

      Спасибо

  • @user_alex_
    @user_alex_ 7 месяцев назад

    👍👍👍👍👍👍👍👍👍👍👍👍👍👍

  • @user-nx4oi5pt2u
    @user-nx4oi5pt2u Год назад

  • @proxonq6968
    @proxonq6968 3 года назад +3

    Видео курсы ТОП!!! А есть вопрос такой в pycharm debug как включить а то пишет "Frames are not available" что делать?

    • @PythonHubStudio
      @PythonHubStudio  3 года назад +2

      Спасибо!
      Вы наверно не правильно работаете с точками останова, поставьте точку останова(между нумерацией строк и строкой кода).

  • @user-kn5ip9lr6r
    @user-kn5ip9lr6r Год назад +1

    Спасибо. Цикл видео называется "с нуля до junior". Будут ли еще видео в этом плейлисте или всего этого уже достаточно для уровня Junior?

    • @PythonHubStudio
      @PythonHubStudio  Год назад +1

      Знаний питон достаточно, осталось выбрать сферу где вы хотите быть джуниором, и изучить эти фреймворки. Например, для веб разработки на питон, нужно: python, фреймворк Django(поверхностно), реляционная база данных, например postgres. Вообщем, Джуниор должен что-то уметь делать на простом уровне

    • @user-kn5ip9lr6r
      @user-kn5ip9lr6r Год назад +1

      @@PythonHubStudio спасибо большое. У вас хорошо получается объяснять. Развивайте канал и дальше

  • @knarg4682
    @knarg4682 4 месяца назад

    Попробуйте написать x.lvl += 5 и понять, почему получилось то, что получилось.

  • @harlok13
    @harlok13 Год назад

    здравствуйте) а почему в инициализаторе имя класса указано явно? и еще такой вопрос, разве стоит использовать isinstance для проверки на тип int? ведь булева значения также пройдут. буду благодарен за ответ

    • @harlok13
      @harlok13 Год назад

      спасибо) аналогия с игрой хорошо илюстрирует примеры использования

  • @andreweutuchenko9107
    @andreweutuchenko9107 3 года назад +2

    Получается мы инкапсулируем переменную, чтобы ее нельзя было изменить, но при этом setter дает нам возможность ее изменять так-же как будто инкапсуляции и не было?

    • @PythonHubStudio
      @PythonHubStudio  3 года назад +4

      Да, только одно уточнение, код в сеттере препятствует присвоению не корректного значения, или сеттера вообще может не быть

  • @user-znamenskii
    @user-znamenskii 2 года назад

    Если запускать метод set_cls_field через имя экземпляра, то он не срабатывает. Не могли сказать как это исправить?

  • @misha8280
    @misha8280 2 года назад

    А для чего __LVL, __HEALTH, __slots__? И что это такое? А так все три урока. 5 звезд) Хотелось бы курс на степик)

    • @PythonHubStudio
      @PythonHubStudio  2 года назад +1

      Какая разница на степик или тут) ничего не меняется, только на степик, почему-то берут копейки за то что должно быть в доступе бесплатно.
      Я вроде бы объясненил что эти переменные значат

    • @misha8280
      @misha8280 2 года назад

      @@PythonHubStudio На степик просто задачи, а в интернете сугубо по ООП толковых задач я не нашёл. И в ролике я не до конца просто понял что обозначают. Но уже, загуглив, все разобрал. __LVL, __HEALTH - это инкапсулируемые атрибуты класса(которые будут использоваться в classmethod), а __slots__ - это список разрешенных свойств класса

  • @PythonHubStudio
    @PythonHubStudio  2 года назад +8

    Ссылка на ПОЛНЫЙ курс ООП из ТРЕХ видео:
    ruclips.net/p/PLNi5HdK6QEmX9fxp3_IBFx1O5tiTmKlYm
    И созданием профессиональной программы в ООП стиле:
    ruclips.net/p/PLNi5HdK6QEmUIkR63RLqkECTCUwThQtcN

  • @konstantinkuznetsof1217
    @konstantinkuznetsof1217 2 года назад

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

  • @obsessivedisordeable
    @obsessivedisordeable 2 года назад

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

  • @konstbespr619
    @konstbespr619 3 года назад +1

    Расскажи пожалуйста про конструкцию if __name__ == __main__:

    • @PythonHubStudio
      @PythonHubStudio  3 года назад +1

      Видео на канале "Импорт модулей" где-то с 15й минуты

  • @brndk-games
    @brndk-games 2 года назад

    Ничего не понятно, но очень интересно)

  • @kayuttv8231
    @kayuttv8231 Год назад

    Объясните пожалуйстп, почему __slots__ пишеться с двойным подчеркиванием слева и справа. И для чего это нужно. Заранее спасибо)

    • @PythonHubStudio
      @PythonHubStudio  Год назад

      Инкапсулированный атрибут, благодаря подчеркиваниям вначале, а в конце - для симметрии, чтоб не путать со своими. Как-то так...

    • @kayuttv8231
      @kayuttv8231 Год назад

      @@PythonHubStudio Вроде понял, спасибо.

  • @digitaIdevil
    @digitaIdevil 7 месяцев назад

    Почему то строчка __slots__ конфликтовала со всем кодом и выдавала ошибку 'lvl' in __slots__ conflicts with class variable

  • @user-rx6fk9vk4s
    @user-rx6fk9vk4s 2 года назад

    Урок супер👍. Я не понял только одно, как именно выбирается декоратор.

    • @PythonHubStudio
      @PythonHubStudio  2 года назад

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

    • @user-rx6fk9vk4s
      @user-rx6fk9vk4s 2 года назад

      @@PythonHubStudio Как выбирается декоратор к конкретной функции. Это рандомное выражение через @ или декораторы вшиты в сам пайтон и каждый может присвоен к определенным функциям. Надеюсь смог сформировать вопрос)

    • @PythonHubStudio
      @PythonHubStudio  2 года назад +2

      Эти декораторы вшиты про них это видео, можно создавать свои про это есть в уроке 7часовом(без ООП правда) и через декораторы часто нужно работать с библиотеками, фреймворками (они там уже "готовые" )

    • @user-rx6fk9vk4s
      @user-rx6fk9vk4s 2 года назад +2

      @@PythonHubStudio спасибо большое за ответ, я уже смотрю 7 часовой курс👍

  • @arktikmoon
    @arktikmoon 3 года назад +2

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

    • @PythonHubStudio
      @PythonHubStudio  3 года назад +1

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

    • @slavaseredenko4846
      @slavaseredenko4846 2 года назад +1

      @@PythonHubStudio А мне отлично зашел пример с персонажами. Я прекрасно понимаю, зачем нужен тот или иной метод. Например, когда мы создаем класс мага, у него должно быть явно меньше очков прочности чем у танка. Я даже добавил себе показатели силы, выносливости, урона. Прямо уже готовый персонаж получился по характеристиками, только прилепить к игре и в путь. Спасибо за пример

  • @martincimonyan9645
    @martincimonyan9645 2 года назад +2

    а для чего перменная в классе подчёркнута с двух сторон ? (__slots__)

    • @PythonHubStudio
      @PythonHubStudio  2 года назад +1

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

  • @user-gp6yj5or7u
    @user-gp6yj5or7u 3 года назад

    print(print(x.get_lvl()))) принт в принт что делает? Зачем так используется?

    • @PythonHubStudio
      @PythonHubStudio  3 года назад +2

      Та то случайно)

    • @user-gp6yj5or7u
      @user-gp6yj5or7u 3 года назад +1

      @@PythonHubStudio Я уж подумал, какой-то хитрый способ одновременно напечатать и переменную и её свойства ))

  • @knocker6970
    @knocker6970 2 года назад +1

    Урок понравился .
    Не понравилось то , что весь код на Pycharm пишу аналогично. Но при попытке обойти инкапсуляцию у меня вызывается ошибка.
    Декораторы не помогают и вообще не помогает ничего, никакие изменения кода. Даже get_lvl.
    Type Error и все, Досвидание! Хоть , что делай но ничего не получиться

  • @aleksy920
    @aleksy920 Год назад

    Не понимаю зачем запрещать доступ к объекту инкапсулированием, если тут же разрешаешь через property и setter?

    • @PythonHubStudio
      @PythonHubStudio  Год назад +1

      В методах вы можете прописать нюансы доступа к нему

  • @hopelesssuprem1867
    @hopelesssuprem1867 2 года назад

    за видео спасибо, но называть это полным курсом по ООП? Смешно)

  • @nazarpark32
    @nazarpark32 2 года назад

    Как это всё запомнить!? :(

  • @bratka4636
    @bratka4636 2 года назад

    Написал код по твоему видео ТОЧЬ В ТОЧЬ! НЕ ПОНИМАЮ ЧТО ЕМУ НЕ ХВАТАЕТ ( ОШИБКА НЕТУ АТРИБУТА ХОТЯ ОН УКАЗАН!)
    from datetime import datetime as dt
    class Player:
    __LVL, __HEALTH = 1, 100
    __slots__ = ['__lvl', '__health', '__born']
    def __init(self):
    self.__lvl = Player.__LVL
    self.__health = Player.__HEALTH
    self.__born = dt.now()
    # Декораторы используются в ООП при наличии двух одинаковых методов ( def lvl )
    # чтобы пайтон знал к чему обращаться в нужный момент
    @property # Decorator property
    def lvl(self):
    return self.__lvl
    @lvl.setter #SETTER Устанавливает значение
    def lvl(self, numeric):
    self.__lvl += numeric
    # Декоратор property может существовать один а setter без property НЕТ!
    # При вызове МЕТОДА не нужно указывать "()" так как он маскируется под свойство экземпляра
    x = Player()
    print(x.lvl)
    x.lvl = 5
    print(x.lvl)

    • @PythonHubStudio
      @PythonHubStudio  2 года назад

      В __slots__ по два подчеркивания нужно

    • @bratka4636
      @bratka4636 2 года назад

      @@PythonHubStudio Нашёл проблему , оказалось в __init__() не было двух слешей "__init" Сори за беспокойство
      Ps: дефолтный тупёж )))))

    • @PythonHubStudio
      @PythonHubStudio  2 года назад

      А это я и не заметил....))

    • @bratka4636
      @bratka4636 2 года назад

      @@PythonHubStudio не знаю на 100% (я же только как начинаю учить Питон ) но думаю что это частая проблема)))) (синтаксис)

    • @PythonHubStudio
      @PythonHubStudio  2 года назад +1

      Очень частая, чтоб было проще среда разработки pycharm или vscode

  • @vladkrolik2700
    @vladkrolik2700 2 года назад

    не много поплыл на этом уроке

  • @maiorchiks3107
    @maiorchiks3107 2 года назад

    не зашло

  • @Beningo_Rossi
    @Beningo_Rossi Год назад

    Привет, уроки топ, но впервые столкнулся с проблемой. Почему у меня не повышается уровень после присвоения ему нового значения, а именно Player.set_cls_field(10) , мне так же выдает 1 уровень, может я невнимательный, но вроде всё правильно сделал. 17:00
    Основной код:
    from datetime import datetime as dt
    class Player:
    _LVL, __HEALTH = 1, 100
    __slots__ = ['__lvl', '__health', '__born']
    def __init__(self):
    self.__lvl = Player._LVL
    self.__health = Player.__HEALTH
    self.__born = dt.now()
    @property
    def lvl(self):
    return self.__lvl, f'{dt.now() - self.__born}'
    @lvl.setter
    def lvl(self, numeric):
    self.__lvl += numeric
    if self.__lvl >= 100: self.__lvl = 100
    @classmethod
    def set_cls_field(cls, lvl=1, health=100):
    cls.__LVL = lvl
    cls.__HEALTH = health
    Код написанный уже после наследования:
    from Decorator import Player # Decorator названия файла с основным кодом
    Player.set_cls_field(10)
    x = Player()
    print(x.lvl)