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