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
Четко, постепенно. Без пропусков по причине "это классика бл№ть это знать надо". Классные уроки спасибо.
С каждым пройденным уроком я всё больше радуюсь, что нашёл этот канал. Даже если что то не понятно с первого раза, то ты хотя бы понимаешь, что просто не уловил и надо пересмотреть, а не лектор пытается привить тебе ненависть к программированию. Очень лаконично и хорошо подан материал, присоединяюсь к благодарностям! Выпускайте ещё лекций.
Спасибо, очень приятно
Очень понятный и наглядный урок, спасибо за ваш труд. Если у вас будет возможность, пожалуйста, рассмотрите и дескрипторы тоже.
Будут, но чуть позже
@@PythonHubStudioспасибо за Ваш труд. Всё ещё планируется продолжение? Очень ждём))
И снова БИНГО! Реально все 3 урока просты в понимании, без замудреных терминов. Все прекрасно преподнесено, спасибо автору, приступаю к практике
Спасибо за курс! Удивляюсь каждый раз насколько точно, быстро и понятно вы объясняете материал. Успехов вам в вашем деле!
Это видео помогло мне понять суть данных декораторов. Хорошее объяснение с прекрасным примером.
Спасибо, это был очень качественный мини-курс. Однозначно, лайк, подписка и уважение+ )))
Спасибо за ваш труд. Наглядно, не спеша и не тараторя и все понятно. Большое спасибо.
Спасибо за серию видео по ООП! После просмотра все уложилось в голове и стало значительно понятнее!
Впервые столкнулась с понятиями полиморфизма, инкапсуляции и многого другого на этих уроках. Вау!
у Вас лучшие уроки по программированию из всех что я видел. большое спасибо!
Отличный урок, все понятно, а что не понятно - стало понятно по ходу видео. 👍
Очень хорошие уроки. Про перегрузку операторов тоже хотим.
Боже, спасибо что есть такие люди как Вы!
Отличный контент. Про перегрузку тоже надо знать. Запишите пожалуйста про перегрузку методов. Спасибо.
Круто сработано! Материал отлично зашел! Спасибо!
Круто. И посмеялся, и усвоил инфу которую не понимал. Лойс+подписка
Спасибо! Понятно, доступным языком!.
Отличный урок. Очень понравился
Автор - красаучег! Спасибо.
Подписчиков тебе в карму автор!! Очень качественный материал
Отличный урок про ООП, все ясно и понятно
круто! ) Да , хотелось бы про дескрипторы))
Значит будет)
Спасибо за курс,прошел как базовый так и ооп благодаря автора ! больший ему респект)))
Действительно годно.. Спасибо!
Спасибо за труд. Годное видео
Огромное спасибо! Посмотрел двух других преподавателей пайтона, у которых тоже есть талант к обучению, но здесь все выражено реально максимально понятно и доступно!
Два дня бился с декоратором @property, реально не мог из текста и видео понять, что это и зачем нужно, но после этого видео реально все встало на места.
как по мне все же нагляднее по старинке :
get_a()
set_a()
Отлично. Спасибо!
Спасибо большое! Лайк
Про дескрипторы урок хотелось бы :]
Дай бог тебе здоровья!!!
Спасибо за урок 👍🏼
урок бомба, спасибо огромное!
Класно пояснено!
отличный курс !
Спасибо за курс
Здравствуйте. Зашел проголосовать за урок про декораторы.
Спасибо огромное!!
"Изменим значение констант" =) А так спасибо, очень хорошие уроки =)
Да, это немного встряхнуло )
Но это происходит только в праздничные дни, чтобы получить повышенный Level)
спасибо за видео
Только вот начался этот урок и я услышал выражение "Это будет не по ПЕП". Хм, что такое ПЕП!? Нашел в интернетах статью об этом преславутом Пеп8. Прочитал, теперь знаю намного больше. Спасибо тебе за внимательность к деталям
Увидел твой комментарий и решил посмотреть что такое Пеп8. Прочитал, теперь знаю намного больше. Лол)
спасибо за видео
управился с тремя роликами по ооп примерно дней за 14
но если напрячься можно и дней за 7
Конечно нужен урок
Голосую за перегрузку оператора!!!!
Спасибо!
Спаасибо!
Лучший!!!!
спасибо!
Дякую за роботу та відео 👍🔥 а можна кайлі лінукс урок .
Спасибо за урок! декоратор классметод может работать внутри наследованного класса, изменяя родительский?
Доброго времени суток, скажите пожалуйста, есть ли ещё отличия декораторов @classmethod от @staticmethod, кроме написания и того, что метод класса работает с классом, а статистический с классом через свои параметры?
Добрый день. Только подписался на Ваш канал. Все четко, спасибо за информацию. Возможно у Вас есть видео про композицию в ООП, если неи, возможно ли записать такой ролик? Спасибо
Спасибо, нет, про композицию нет, скорее всего скоро сделаю, тема интересная.
Спасибо
👍👍👍👍👍👍👍👍👍👍👍👍👍👍
Видео курсы ТОП!!! А есть вопрос такой в pycharm debug как включить а то пишет "Frames are not available" что делать?
Спасибо!
Вы наверно не правильно работаете с точками останова, поставьте точку останова(между нумерацией строк и строкой кода).
Спасибо. Цикл видео называется "с нуля до junior". Будут ли еще видео в этом плейлисте или всего этого уже достаточно для уровня Junior?
Знаний питон достаточно, осталось выбрать сферу где вы хотите быть джуниором, и изучить эти фреймворки. Например, для веб разработки на питон, нужно: python, фреймворк Django(поверхностно), реляционная база данных, например postgres. Вообщем, Джуниор должен что-то уметь делать на простом уровне
@@PythonHubStudio спасибо большое. У вас хорошо получается объяснять. Развивайте канал и дальше
Попробуйте написать x.lvl += 5 и понять, почему получилось то, что получилось.
здравствуйте) а почему в инициализаторе имя класса указано явно? и еще такой вопрос, разве стоит использовать isinstance для проверки на тип int? ведь булева значения также пройдут. буду благодарен за ответ
спасибо) аналогия с игрой хорошо илюстрирует примеры использования
Получается мы инкапсулируем переменную, чтобы ее нельзя было изменить, но при этом setter дает нам возможность ее изменять так-же как будто инкапсуляции и не было?
Да, только одно уточнение, код в сеттере препятствует присвоению не корректного значения, или сеттера вообще может не быть
Если запускать метод set_cls_field через имя экземпляра, то он не срабатывает. Не могли сказать как это исправить?
А для чего __LVL, __HEALTH, __slots__? И что это такое? А так все три урока. 5 звезд) Хотелось бы курс на степик)
Какая разница на степик или тут) ничего не меняется, только на степик, почему-то берут копейки за то что должно быть в доступе бесплатно.
Я вроде бы объясненил что эти переменные значат
@@PythonHubStudio На степик просто задачи, а в интернете сугубо по ООП толковых задач я не нашёл. И в ролике я не до конца просто понял что обозначают. Но уже, загуглив, все разобрал. __LVL, __HEALTH - это инкапсулируемые атрибуты класса(которые будут использоваться в classmethod), а __slots__ - это список разрешенных свойств класса
Ссылка на ПОЛНЫЙ курс ООП из ТРЕХ видео:
ruclips.net/p/PLNi5HdK6QEmX9fxp3_IBFx1O5tiTmKlYm
И созданием профессиональной программы в ООП стиле:
ruclips.net/p/PLNi5HdK6QEmUIkR63RLqkECTCUwThQtcN
спасибо за интересное видео. но нужна помощь. пытаюсь повторять то что вы делаете в видео, для лучшего запоминания, полностью скопировал ваш код и при запуске программа выдает "" добиться изменения уровня как у вас не получилось, где может быть ошибка, подскажите пожалуйса
почему вы сначала используете переменную _lvl, а потом запрашиваете вывод просто lvl? это же получается незаданная переменная, разве нет? у меня ошибку выдал, когда я пыталась повторить ваш код
Расскажи пожалуйста про конструкцию if __name__ == __main__:
Видео на канале "Импорт модулей" где-то с 15й минуты
Ничего не понятно, но очень интересно)
Круто) но жаль, мне(
Объясните пожалуйстп, почему __slots__ пишеться с двойным подчеркиванием слева и справа. И для чего это нужно. Заранее спасибо)
Инкапсулированный атрибут, благодаря подчеркиваниям вначале, а в конце - для симметрии, чтоб не путать со своими. Как-то так...
@@PythonHubStudio Вроде понял, спасибо.
Почему то строчка __slots__ конфликтовала со всем кодом и выдавала ошибку 'lvl' in __slots__ conflicts with class variable
Урок супер👍. Я не понял только одно, как именно выбирается декоратор.
Не много не понял вопроса..., под ваши нужды
@@PythonHubStudio Как выбирается декоратор к конкретной функции. Это рандомное выражение через @ или декораторы вшиты в сам пайтон и каждый может присвоен к определенным функциям. Надеюсь смог сформировать вопрос)
Эти декораторы вшиты про них это видео, можно создавать свои про это есть в уроке 7часовом(без ООП правда) и через декораторы часто нужно работать с библиотеками, фреймворками (они там уже "готовые" )
@@PythonHubStudio спасибо большое за ответ, я уже смотрю 7 часовой курс👍
Вроде бы как всё наглядно и доступно но тяжело доходит. Видимо пример с игрой воспринимается как то мной не оч. С кошельками вообще норм зашел урок. Спасибо за дополнительные пояснения как делать нужно, а как не нужно и почему не нужно.
Пример игры, это так, чтоб был пример на чем рассказывать, главное саму механику декораторов и инкапсуляции уловить, тоже самое можно сделать в кошельке, просто реализация списания-пополнения будет другая
@@PythonHubStudio А мне отлично зашел пример с персонажами. Я прекрасно понимаю, зачем нужен тот или иной метод. Например, когда мы создаем класс мага, у него должно быть явно меньше очков прочности чем у танка. Я даже добавил себе показатели силы, выносливости, урона. Прямо уже готовый персонаж получился по характеристиками, только прилепить к игре и в путь. Спасибо за пример
а для чего перменная в классе подчёркнута с двух сторон ? (__slots__)
Специальный атрибут, в котором перечисляются имена переменных разрешенных в классе, создание других вызовет ошибку
print(print(x.get_lvl()))) принт в принт что делает? Зачем так используется?
Та то случайно)
@@PythonHubStudio Я уж подумал, какой-то хитрый способ одновременно напечатать и переменную и её свойства ))
Урок понравился .
Не понравилось то , что весь код на Pycharm пишу аналогично. Но при попытке обойти инкапсуляцию у меня вызывается ошибка.
Декораторы не помогают и вообще не помогает ничего, никакие изменения кода. Даже get_lvl.
Type Error и все, Досвидание! Хоть , что делай но ничего не получиться
Глупости.
Не понимаю зачем запрещать доступ к объекту инкапсулированием, если тут же разрешаешь через property и setter?
В методах вы можете прописать нюансы доступа к нему
за видео спасибо, но называть это полным курсом по ООП? Смешно)
Как это всё запомнить!? :(
Практика
Написал код по твоему видео ТОЧЬ В ТОЧЬ! НЕ ПОНИМАЮ ЧТО ЕМУ НЕ ХВАТАЕТ ( ОШИБКА НЕТУ АТРИБУТА ХОТЯ ОН УКАЗАН!)
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)
В __slots__ по два подчеркивания нужно
@@PythonHubStudio Нашёл проблему , оказалось в __init__() не было двух слешей "__init" Сори за беспокойство
Ps: дефолтный тупёж )))))
А это я и не заметил....))
@@PythonHubStudio не знаю на 100% (я же только как начинаю учить Питон ) но думаю что это частая проблема)))) (синтаксис)
Очень частая, чтоб было проще среда разработки pycharm или vscode
не много поплыл на этом уроке
не зашло
Привет, уроки топ, но впервые столкнулся с проблемой. Почему у меня не повышается уровень после присвоения ему нового значения, а именно 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)