#5. Методы класса (classmethod) и статические методы (staticmethod) | ООП Python

  Рет қаралды 117,025

selfedu

selfedu

2 жыл бұрын

Курс по Python ООП: stepik.org/a/116336
Декораторы @classmethod и @staticmethod для определения методов классов и статических методов. Что это такое и как работают узнаете из этого видео.
Инфо-сайт: proproprogs.ru/python_oop
Telegram-канал: t.me/python_selfedu

Пікірлер: 168
@voldemar957
@voldemar957 2 жыл бұрын
Я очень разочаровался после просмотра этого видео!😫 Так как я понял, что ПОПАЛ НА ДЕНЬГИ! А именно в том, что я записался на платный курс "Python разработчика" с последующим трудоустройством, пересматривал лекции в течении 3-х месяцев и понял из представленного материала только то, что автор того курса типа "крутой программист" и ничего не понял по делу. И вот совершенно случайно я попал на это видео и за каких то 14 минут все стало более чем понятно! АВТОРУ КАНАЛА ИСКРЕННЕ ОГРОМНОЕ СПАСИБО ЗА ГРАМОТНЫЕ И ПОНЯТНЫЕ УРОКИ!👍
@user-wp9os7ce9l
@user-wp9os7ce9l 2 жыл бұрын
Тоже не плохо учиться платно. На курсах скорее всего можно в онлайн обсуждать темы с преподами, да и они так сказать пинать будут учиться. А вот самоучкам бывает порою просто лень заниматься...
@voldemar957
@voldemar957 2 жыл бұрын
@@user-wp9os7ce9l Исходя из моего личного опыта , заниматься не лень , а скорее всего боязнь того , что бесплатные курсы не эффективны , а вот после третьей платной лекции желание учиться и действительно начало пропадать , но
@orthodox-chanel
@orthodox-chanel Жыл бұрын
у автора на степике есть платный курс по ООП там еще можно закрепить знания решая различные задачи. Мне понадобилось почти 3 месяца чтобы пройти бесплатный базовый курс, много сил и времени отнимали эти задачи, зато сейчас более менее нормально ориентируюсь в языке. Еще месяц изучал парсинг и теперь с Божьей помощью могу и парсингом заниматься. Теперь вот пришлось вернуться к этому автору уже чтобы ООП подтянуть для дальнейшего развития в питоне. Со знанием ООП уже можно и джанго изучать и на телеграм боты нацелиться. Хотя для последнего нужно еще уметь писать асинхронный код
@andrewbelikov8772
@andrewbelikov8772 Жыл бұрын
это не первое видео, про класс методы и статические методы, которое я смотрел, но это первое видео, по которому я понял, зачем они нужны!! ))) Спасибо!
@davyzaebali
@davyzaebali Жыл бұрын
@Andrew C Декораторы @classmethod и @staticmethod позволяют унифицировать вызовы методов, которые они декорируют, т.е. вызывать их с использованием одинакового синтаксиса вне зависимоти от того, передается или нет при вызове неявный параметр. Вызов self.validate(5) первым парамертом неявно передает self. Вызов Vector.validate(5) не передает неявный параметр, хотя он нужен.Декоратор @classmethod заботится об этом, добавляя неявный параметр. Вызов Vector.norm2(5, 6) не передает неявынй параметр. Вызов self.norm2(5, 6) передает невный параметр, хотя он не нужен. Декоратор @staticmethod заботится об этом, удаляя неявный параметр. Использование этих декораторов позволяет вызывать статические методы и методы класса без явного указания имени класса (в нашем случае это Vector), устраняя таким образом привязку кода к конкретному имени класса. И при этом вызывать эти методы единообразно, не заботясь о нюансах передачи неявного параметра, т.к. эту заботу берут на себя декораторы.
@shaykhinurov
@shaykhinurov Жыл бұрын
Ничего не понял, но очень интересно
@AlexA-nr3rj
@AlexA-nr3rj 10 ай бұрын
@@andrewc3942 Представьте матрёшку , в одной 3 вложения ,в другой 2 в 3м экземпляре нет вложений - она такая какая есть. Они все разных цветов . И вот вас просят показать - определенный цвет. ЗЫ - объяснил как мог ) если не прав поправьте.
@vlakin1
@vlakin1 2 жыл бұрын
Спасибо большое ! - у вас талант к преподаванию :-) более толкового объяснения - я еще в жизни не встречал!
@so-crypto
@so-crypto 7 ай бұрын
Класс , информативное видео без воды . В конце подвёл итог , за это отдельный респект.
@user-vm1df5rs8i
@user-vm1df5rs8i 11 күн бұрын
Вы просто идеальный учитель !!!!! всё быстро и понятно !!!! спасибо
@johnmazepa
@johnmazepa 11 ай бұрын
всё прояснилось на моменте финального подведения итогов урока во время второго просмотра) доходчиво. спасибо.
@petyap7600
@petyap7600 2 жыл бұрын
Как мысли прочитал. Думал освежить это. Всегда путался когда что надо.
@sergeyv1534
@sergeyv1534 2 жыл бұрын
Огромная благодарность за ваш труд! Очень полезный материал с исключительно понятным объяснением.
@beribanyu
@beribanyu 2 жыл бұрын
Спасибо за урок, очень не хватает задач по темам. Было бы клево на практике немного это все вкусить!
@masahikokimura5268
@masahikokimura5268 Жыл бұрын
Огромное спасибо за ваш труд
@Dmitrii-Zhinzhilov
@Dmitrii-Zhinzhilov Жыл бұрын
Сергей, благодарю! Отличная работа!! 👍🔥
@user-st5cj8pk1f
@user-st5cj8pk1f 3 күн бұрын
У автора даже в голосе очки 🥽 чувствуются😂😂, в воображение рисует классического клишированного программиста из 90, не в обиду говорю) а так курс хороший, тема объясняется доступно и понятно , большое человеческое спасибо за плейлист!
@catsaur5991
@catsaur5991 Жыл бұрын
Вот это супер объяснение! Спасибо!
@igorzalutskyi5367
@igorzalutskyi5367 2 жыл бұрын
Всё чётко и понятно)
@web4453
@web4453 Жыл бұрын
Было большой удачей найти ваш сайт, а после еще и канал)
@user-buser_eto_ja
@user-buser_eto_ja Жыл бұрын
Я прям кайфую с этого канала! Очень круто
@user-xi8ru1lo7e
@user-xi8ru1lo7e 8 ай бұрын
Огромное спасибо, объясняете просто превосходно, даже такому дубу как я все понятно с первого раза!)Успехов, жму руку!
@anvarx1
@anvarx1 Жыл бұрын
Отличные уроки. Спасибо
@vladimirastrelin1719
@vladimirastrelin1719 Жыл бұрын
Круто..полезный урок. Спасибо большое!
@WasWollenWirDrinken
@WasWollenWirDrinken Ай бұрын
автор просто легенда, спасибо за детство
@lombord69
@lombord69 Жыл бұрын
Я ВАС ОЧЕНЬ ЛЮБЛЮ СПАСИБО ВАМ ОГРОМНОЕ ЗА ВСЁ
@wolfich4684
@wolfich4684 Жыл бұрын
Офигеть, у вас дар ясно объяснять. Спасибо!
@user-tx3mt1zi2d
@user-tx3mt1zi2d 18 күн бұрын
год назад,у меня не получалось сделать банальные вещи,какой же кайф то ощущение,что мне наконец то все понятно!
@MrJet84
@MrJet84 Жыл бұрын
Всё суперпонятно. Спасибо!
@wizardx_X
@wizardx_X 10 ай бұрын
Спасибо за уроки, очень интересно! Надеюсь, скоро выучусь и все же поменяю работу на программиста) Недавно начал учить django по книге, там все хорошо объяснялось, но знаний основ не хватало, прям очень сложно было следить за тем, что и для чего мы пишем, так что решил для начала по ООП пройтись и тут такой хороший курс! Да, я понимаю, что вряд ли научусь делать такие вещи, какие уже сделаны в django или других фреймворках, но зато буду понимать те принципы, которые там применяются и со временем дойду до создания таких вещей с 0
@user-pp4cp2sr6p
@user-pp4cp2sr6p 2 жыл бұрын
Спасибо большое за доходчивое объяснение! Если бы еще в конце видео предлогалось какое нибудь практическое занятие, связанное с реальными задачами, было бы вообще супер класс! Канал топ!
@user-rm3ed8tr7z
@user-rm3ed8tr7z Жыл бұрын
братишка такое есть заходи на стенки там есть задания и целый курс этого человека!!!
@user-km9jn7hb8p
@user-km9jn7hb8p Жыл бұрын
@@user-rm3ed8tr7z Приветствую! Можно подробней, "на стенки" - это куда?
@arcinvicta
@arcinvicta Жыл бұрын
@@user-km9jn7hb8p на степик я думаю предыдущий оратор хотел сказать
@user-km9jn7hb8p
@user-km9jn7hb8p Жыл бұрын
@@arcinvicta спасибо
@arcinvicta
@arcinvicta Жыл бұрын
@@user-km9jn7hb8p вообще, посмотри! Там много толковых курсов по пайтону недорогих, или, даже совсем бесплатных!!!
@andredru4278
@andredru4278 2 ай бұрын
Спасибо. Отлично. Все понятно.
@pullya66
@pullya66 2 жыл бұрын
гениальный учитель
@kohfbi4
@kohfbi4 4 ай бұрын
Спасибо огромное!
@EvgeniySakharov
@EvgeniySakharov 5 ай бұрын
До этого видео вчера все шло отлично. Но видимо отвлекли мысли и что то упустил. Сейчас, на следующий день, пересмотрел, все ок. Соглашусь с человеком который оставил комментарий ниже. У Вас талант! Даже на собачках и кошечках у Вас получается достучаться до моего 50 ти летнего мозга. Ну а что, грешен, пошел учиться на программиста. ))))
@SherinYuri
@SherinYuri 19 күн бұрын
50 лет - это не предел. Мне 65, но тоже с интересом постигаю азы программирования. Успехов!
@user-mp7wq3qz8f
@user-mp7wq3qz8f Ай бұрын
Это же великолепно. Нет, ну правда.
@arnoldvelichko9754
@arnoldvelichko9754 10 ай бұрын
интересный урок, спасибо
@user-my3jg8mx8n
@user-my3jg8mx8n 4 ай бұрын
Сасибо большое!
@vladislavgrin7122
@vladislavgrin7122 Жыл бұрын
6:47 Возможно, было бы еще правильнее написать type(self).validate(x). Потому что при вызове функции от self, может возникнуть ложное понимание, что функция как-то воспользуется атрибутами экземпляра.
@photo_graf_khv
@photo_graf_khv Ай бұрын
Спасибо!
@tab1k667
@tab1k667 Жыл бұрын
Perfect!
@user-et4if5gs8z
@user-et4if5gs8z 2 жыл бұрын
пишите cls в classmethod, но помните, что можно и self и eklmn питон не привередливый. съест всё в отличие от собеседователя
@uniqqquniqqq2053
@uniqqquniqqq2053 Жыл бұрын
Искал одну конкретную тему, нашел ваше видео. Так понравилось, что начал весь курс смотреть. Спасибо вам большое!
@user-tm9ng7if3t
@user-tm9ng7if3t 2 жыл бұрын
Очень доходчиво!!! Спасибо
@Shoi628
@Shoi628 Жыл бұрын
Super!
@jamjam3337
@jamjam3337 Жыл бұрын
спасибо!
@symphonyofscreams
@symphonyofscreams Ай бұрын
от души
@elenalevasheva3830
@elenalevasheva3830 Жыл бұрын
Спасибо за урок, как всегда просто песня, не захочешь быть программистом, а станешь
@TheRunnerSVO
@TheRunnerSVO Жыл бұрын
Как работают статические методы и методы класса вы объяснили, но для чего они на практике нет. Я могу сделать обыкновенную функцию валидации х и у, которая отработает точно так же. наверно, надо было добавить больше про наследование, про экземпляры класса, где метод класса будет работать в каждом по своему, например, создать еще один экземпляр класса, поменять значения min и max. Наверно, стоило эту тему поднимать после изучения наследования и полиморфизма.
@user-jh9vd1xo4g
@user-jh9vd1xo4g Жыл бұрын
Согласен @selfedu здесь явно просчитался
@gggutya
@gggutya Жыл бұрын
Ну почему же? Я понял для чего и зачем это. Например ф-ция с self - что то делает с атрибутами экземпляра, но не может с атрибутами класса С cls - работает с атрибутами класса, но не экземпляра А статическая - универсальная, может работать везде и со всеми,если это требуется Остается просто использовать то,что нужно будет в ситуации
@morphinewrld6927
@morphinewrld6927 11 ай бұрын
@@gggutya ты вполне также можешь обращаться к атрибутам класса и изменять их, даже из функции с self
@gggutya
@gggutya 11 ай бұрын
@@morphinewrld6927 Да, за столько времени я это выяснил, но не задумывался, зачем же тогда cls нужно раз и с self все нормально работает
@gggutya
@gggutya 11 ай бұрын
@@morphinewrld6927 Хотя думаю,что в очень скором времени куплю курс на степике. Теория круто, конспекты веду в письменном виде, но без теории знания я чувствую как забываются
@rogersmith3141
@rogersmith3141 5 ай бұрын
Топчик ваще
@_mrmark
@_mrmark Жыл бұрын
Чем то напомнило урок математики в школе. Как считать объяснили, а для чего это нужно - нет!
@licantrop609
@licantrop609 8 ай бұрын
Мне кажется, это нужно чисто для построения красивой архитектуры приложения. Скажем, если надо сделать какие то независимые от класса действия, но нужные для его работы в будущем, было б некрасиво пилить одинокую функцию вне класса. А так можно привязать независимую функцию к классу, будто они из одной коробки.
@gayratsaidakhmedov5451
@gayratsaidakhmedov5451 3 ай бұрын
спасибо
@Elvin_use
@Elvin_use 2 ай бұрын
Подытожим: Декораторы "@staticmethod" и "@classmethod" в Python используются для определения методов, которые могут быть вызваны без создания экземпляра класса. Однако, есть разница в том, как они работают: 1. "@staticmethod": - Статический метод не требует доступа к экземпляру класса или его атрибутам. - Он может быть вызван как метод класса или через экземпляр класса. - В качестве первого аргумента не передается экземпляр класса или класс, что позволяет использовать его для общих операций, не связанных с конкретным экземпляром. - Обычно используется для группировки функциональности, которая относится к классу, но не зависит от конкретного экземпляра. 2. "@classmethod": - Метод класса принимает класс (`cls`) в качестве первого аргумента, а не экземпляр класса. - Он может быть вызван как метод класса или через экземпляр класса. - Позволяет работать с атрибутами класса, а не только с экземплярами. - Часто используется для создания альтернативных конструкторов или для доступа к атрибутам класса. Таким образом, основное различие между "@staticmethod" и "@classmethod" заключается в том, что статический метод не имеет доступа к классу или экземпляру, в то время как метод класса имеет доступ к классу через параметр "cls".
@random_act
@random_act 7 ай бұрын
шик
@ARSEN55630
@ARSEN55630 Жыл бұрын
Інтересно і полезно!
@user-gy5zd1xl6c
@user-gy5zd1xl6c 6 ай бұрын
мне 14 лет хочу стать Backend програмистом нашел у вас курс по джанго на 1 уроке надо знать ооп пошел искать опять нашео канал вот уже 5 ролик смотрю ето просто идиальное обясненейе я немогу передать словами большое спасибо!
@selfedu_rus
@selfedu_rus 6 ай бұрын
Спасибо! Успехов!!!
@abrorizzatullaev836
@abrorizzatullaev836 Жыл бұрын
круто
@impellergimpeller5133
@impellergimpeller5133 2 жыл бұрын
👍👍👍👍👍
@cirnocirno6101
@cirnocirno6101 2 жыл бұрын
Для тех, у кого как и у меня возникли вопросы, что конкретно делают декораторы и что если их закомментировать: @staticmethod: не сможем вызывать через экземпляр класса, первым параметром будет передаваться ссылка на экземпляр, метод будет получать больше параметров, чем ожидает - ошибка, через класс вызывать можно. @classmethod - та же шляпа, через экземпляр в любом случае идет первой ссылка на экземпляр, через класс первым придется явно передать ссылку на класс, декоратор именно это и сделает сам.
@alucardv8551
@alucardv8551 2 жыл бұрын
Вообще не верно! @staticmethod - это, по факту, независимая функция внутри класса, которая не имеет доступа ни к атрибутам класса, ни к атрибутам экземпляра, а работает только с собственными входными значениями (и не требует ни ссылки на экземпляр ни ссылки на класс, так как не имеет к ним доступа!). И при этом может быть вызван как классом, так и его экземпляром (просто без передачи атрибутов). То есть, этот метод делает всё тоже самое что и обычная функция вне класса, но в данном случае, он определён внутри него, для каких-то специфических операций. @classmethod - это метод который работает исключительно со значениями класса! Первым параметром автоматически передаётся cls (ссылка на текущий класс) и соответственно у даного метода есть доступ к атрибутам класса и дополнительным параметрам, которые мы можем ему прописать. Но у него нет доступа к атрибутам экземпляров (для этого юзаються обычные методы) и вызывая его из экземпляра, у него по прежнему останется доступ только к атрибутам класса.
@user-de3op9hs4p
@user-de3op9hs4p 2 жыл бұрын
@@alucardv8551 Девочка лишь написала, зачем эти методы оборачивают в декораторы, и что будет, если этого не делать. И не правы здесь именно Вы. Вы разъясняете смысл самих методов, а говорите, что это делают декораторы этих методов. Так что, если доебываться, то по большому)))
@uewquewqueqwue8264
@uewquewqueqwue8264 Жыл бұрын
@@user-de3op9hs4p ты вот и доебался, белый защитник, она написала что НЕ СМОЖЕМ ВЫЗВАТЬ, хотя это делается спокойно
@ibrahimoglu
@ibrahimoglu 2 жыл бұрын
👍
@armstrong2790
@armstrong2790 Жыл бұрын
Возможно, кому-нибудь поможет. Помимо остальных вопросов меня больше всего беспокоила нуждa в staticmethod, т.к все прекрасно работает с методом без параметра self. Разница в том, что если к нему обращаться уже из класса или вне класса через экземпляр, то в него будет передаваться параметр self и выходить ошибка. Со статич. методом это исключается.
@davyzaebali
@davyzaebali Жыл бұрын
Спасибо!
@ms77grz
@ms77grz Жыл бұрын
👍👍
@user-ou7fw1sg1r
@user-ou7fw1sg1r 2 жыл бұрын
До жирафа наконец дошло как работают эти декораторы. И всё же вопрос остался. Какие практические задачи смогу решить используя возможности обращения только к атрибутам класса и статическим методам. Т.е. цель их назначения я понял, не понял зачем мне это. Поясните плиз или пример из жизни.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Далее еще будут примеры с их использованием
@user-cb1kz3mv7j
@user-cb1kz3mv7j 3 ай бұрын
У меня такой же вопрос как и у других - зачем? То что в видео объяснили - это понятно. 3 метода: 1н универсальный, другой только для работы внутри класса (вызывается через класс, а не экземпляры), третий это по сути обычная функция (без всяких там self, cls и т.п. внутренних относительных ссылок). Но это все - как объяснить, что вот формула силы тока. Запомните. Мол так и так, подставляем данные - получается сила тока. Все. А для чего это? Почему нам недостаточно 1-го универсального метода? Зачем понадобился метод класса? И зачем статический метод? Ведь все можно делать в том методе, где self, верно же я понял? Там даже имя класса подставляется как-то само через self, как будто это ссылки на экземпляр этого класса мало. cls, видимо, не так красиво уже. Это english-style, когда в одно слово втыкают 30 смыслов. И подбирай смысл потом по контексту)) Вот с синглтонами было понятно, иногда нужно ограничить кол-во экземпляров класса одним, там где это вызывает конфликты или ради безопасности. А тут?
@MevErex
@MevErex 2 ай бұрын
Это тоже для безопасности и во избежание конфликтов. Например (аналогия с синглтоном, те же яйца, но только в профиль), у вас есть поле, которое должно быть единым для любых экземпляров этого класса, и если любой экземпляр изменит это поле, то оно должно изменится и у других. Если это сделать без декоратора, то метод будет считать это поле локальным и изменит его только для текущего экземпляра, но не изменит для других. Как правило такие поля делают приватными и доступ к ним возможен только через методы класса. Вот пример, вместо тысячи слов. Обратите внимание, что умышленно заменены self и cls на единое pipiska. Ведь это всего лишь ссылка на объект, и не важно, как она называется. По-разному называют исключительно ради удобства. В первом случае (без декоратора) в pipiska будет подставлена ссылка на объекты a и b, во втором случае - ссылка на класс Translator. class Translator: delay = 0 def request(pipiska): pipiska.delay += 1 def get_delay(pipiska): return pipiska.delay a = Translator() print(f"Before request object A: delay = {a.get_delay()}") a.request() print(f"After request object A: delay = {a.get_delay()}") b = Translator() print(f"Before request object B: delay = {b.get_delay()}") b.request() print(f"After request object B: delay = {b.get_delay()}") print("----------------") a.delay = 10 print(f"Current value for object A: delay = {a.delay}") print(f"Get value for object A: delay = {a.get_delay()}") Результат: Before request object A: delay = 0 After request object A: delay = 1 Before request object B: delay = 0 After request object B: delay = 1 ---------------- Current value for object A: delay = 10 Get value for object A: delay = 10 А теперь с декоратором: class Translator: delay = 0 @classmethod def request(pipiska): pipiska.delay += 1 @classmethod def get_delay(pipiska): return pipiska.delay a = Translator() print(f"Before request object A: delay = {a.get_delay()}") a.request() print(f"After request object A: delay = {a.get_delay()}") b = Translator() print(f"Before request object B: delay = {b.get_delay()}") b.request() print(f"After request object B: delay = {b.get_delay()}") print("----------------") a.delay = 10 print(f"Current value for object A: delay = {a.delay}") print(f"Get value for object A: delay = {a.get_delay()}") Результат: Before request object A: delay = 0 After request object A: delay = 1 Before request object B: delay = 1 After request object B: delay = 2 ---------------- Current value for object A: delay = 10 Get value for object A: delay = 2 Обратили внимание как во втором случае все изменения, производимые экземпляром А, повлияли на исходный класс, и экземпляр Б был создан с учетом этих изменений? Где применимо - простой пример: у вас есть класс, у которого метод делает запрос на сервер и несколько экземпляров этого класса. Но сервер работает так, что запросы надо отправлять не чаще, чем раз в 50 мс с одного IP. Мы создали в классе поле last_request, для запоминания последнего обращения. Если это поле после запроса обновлять методом без декоратора, то текущий экземпляр А всегда будет знать, когда он обратился к методу запроса в последний раз, но понятия не имеет, обращался ли до него другой экземпляр Б, а Б, в свою очередь, ничего не знает о действиях А. И легко может выйти так, что А получит данные, а Б - отказ в доступе, т.к. прошло недостаточно времени, после обращения А. Решение проблемы очевидно - поле last_request должно изменяться и анализироваться исключительно методами класса с декораторами @classmethod. Принцип «разделяй и властвуй» - каждая часть кода должна заниматься своей работой. PS и да, мы имеем возможность обойтись и без декоратора, например, в обычном методе вызвать прямое указание на изменение поля класса через указание прямого имени этого класса (Translator.delay = 1000), но это дурной тон.
@user-cb1kz3mv7j
@user-cb1kz3mv7j 2 ай бұрын
Огонь, спасибо за объяснение! Кажется, начинаю понимать задумку в целом. В питоне есть гибкость, когда одну и ту же логическую конструкцию можно сделать разными способами. Но при этом, рекомендуется делать это явным, рекомендованным способом, чтобы другие разработчики сразу поняли твой код. Некое соглашение. Типа, вот мы придумали помечать декоратором @classmethod те методы в классе, что работают с его приватными свойствами, значит лучше использовать его. Он делает это удобнее и нагляднее. @@MevErex
@user-urfinjuice
@user-urfinjuice 2 жыл бұрын
Курс хороший! А можно примеры, где могут пригодиться данные декораторы?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
в Django, Flask, Tensorflow, Keras
@freeman-strong2789
@freeman-strong2789 6 ай бұрын
Можете ответить, что Вы имеете в виду, когда говорите декоратор? Просто я нахожу определение: это функция, которая имеет как аргумент другую функцию, дополняет и возвращает её. Или может сама запись @staticmethod и есть декоратор?
@selfedu_rus
@selfedu_rus 6 ай бұрын
См. занятие по Python декораторам (или вопрос в ТГ-канал по Python). Вам быстро ответят )
@user-vl5gu8xy4o
@user-vl5gu8xy4o 2 ай бұрын
просто лучший 👍👍👍
@Mika-yq5nr
@Mika-yq5nr 3 ай бұрын
Осталось черным ящиком, как эти декораторы влияют на методы. Приходится искать инфу самому. Например, если не указать в статистическом методе декоратор @staticmethod, то его нельзя будет вызывать через ссылку на объект класса. Если мы укажем методу этот декоратор, то мы сможем это сделать. Получается, декоратор декорирует ф-цию так, чтобы она обходила передачу аргумента self. Это мое предположение. Тема раскрывается не полностью и очень обидно за это
@alexsvii5664
@alexsvii5664 3 ай бұрын
потому что декораторы объяснялись в другом курсе Балакирева , на степике он бесплатен называется "Добрый, добрый Python с Сергеем Балакиревым". Декораторы обязательно нужно изучить и понять, потому что они много где используются в том числе и в ООП, а вместе с ними замыкающие функции.
@Mika-yq5nr
@Mika-yq5nr 3 ай бұрын
Речь не о декораторах в общем, а конкретно про эти два. Про их внутреннюю реализацию 0 слов. Просто используйте их вот так и все. Поверьте на слово
@Aram_Madoyan
@Aram_Madoyan 25 күн бұрын
Кто может помочь, я не понял в чем разница, потому что так тоже работает ? class Vector: MIN_COORD = 10 MAX_COORD = 100 @classmethod def validate(cls, arg): return cls.MIN_COORD
@andreydr2861
@andreydr2861 2 жыл бұрын
Чем дальше в лес, тем страшнее волки!
@user-bv2di6ix9q
@user-bv2di6ix9q Жыл бұрын
10:32 , несколько раз пересматривал и отматывал, но так и не понял из чего получился ответ "500" ? Если будет возможность, ответьте пожалуйста в ответе на коментарий=)
@selfedu_rus
@selfedu_rus Жыл бұрын
500 получается для вектора (10, 20) = 100 + 400 = 500, всю эту конкретику проще в телеграм-канале по Python спрашивать (ссылка под видео).
@user-ms7tx1bk1v
@user-ms7tx1bk1v Жыл бұрын
здравствуйте, для чего сами надписи на функциями, они только для обозначения что бы програмист понимал что они делают, или они несут функционал?
@selfedu_rus
@selfedu_rus Жыл бұрын
вы про эти: @classmethod? Это декораторы. Если не знаете тему, то в курсе по Python (обычном) об этом рассказывается.
@user-kj2nc7qg9y
@user-kj2nc7qg9y Жыл бұрын
следовало показать ошибки но всё равно норм
@andreydr2861
@andreydr2861 2 жыл бұрын
Так? Получается что self делает переменные из локальных в глобальные? И обращение к нему упрощается?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
self - это ссылка на объект класса и все!!!
@andreydr2861
@andreydr2861 2 жыл бұрын
@@selfedu_rus Ok
@user-ns8bt8xb7z
@user-ns8bt8xb7z 8 ай бұрын
А как можно посчитать количество созданных экземпляров класса? и вывести это в переменную
@narkotr4fic843
@narkotr4fic843 4 ай бұрын
class MyClass: class_count = 0 @classmethod def class_calls(cls): cls.class_count += 1 def __init__(self,value): self.value = value self.class_calls() вот так наверное?
@user-sj9yp2xc8g
@user-sj9yp2xc8g Жыл бұрын
Не понял. Зачем @staticmethod нужен в классе если он не работает с атрибутами класса? Легче может тогда не засорять класс и отдельную функцию создать? Я новичок в этом и буду благодарен за доходчивое объяснение
@selfedu_rus
@selfedu_rus Жыл бұрын
например, метод используется для проверки корректности данных, такую функцию выносить за пределы класса не очень, логичнее прописать внутри как статическую
@gowalk3759
@gowalk3759 Жыл бұрын
были бы еще домашки)), а так все отлично
@selfedu_rus
@selfedu_rus Жыл бұрын
они есть (ссылка под видео на курс по ООП)
@andreydr2861
@andreydr2861 2 жыл бұрын
Ну Сергей, как ты сам-то все это понимаешь???
@user-lj1to7le9w
@user-lj1to7le9w Жыл бұрын
В этом и других видео не хватает хотя бы абстрактного объяснения для чего это нужно. Можем так, а можем вот так, или вот так... Меня в первую очередь интересует в каких случаях или для каких целей необходим тот же classmethod, а затем как его реализовывать. Это похоже на обучение вождению, где тебе говорят что есть различные дорожные знаки, но не объясняют для чего они предназначены.
@selfedu_rus
@selfedu_rus Жыл бұрын
В двух словах, если при реализации логики внутри класса требуется работать только с атрибутами класса, то для этого используется classmethod. Если и атрибуты класса и атрибуты экземпляра класса, то обычные методы. Ну а конкретные практические задачи в курсе на Stepik. Welcome! )
@user-lj1to7le9w
@user-lj1to7le9w Жыл бұрын
@@selfedu_rus с этим я уже разобрался вроде бы. Понимания все равно маловато, но полагаю в будущем все станет на свои места. Курс как раз прохожу. Просто чувствуется подход преподавателя, который привык к живому преподаванию. На уроке в аудитории один -два вопроса закрыли мое недопонимание. А так приходится искать объяснения самостоятельно, без гарантии, что пойму я в итоге все правильно.
@vladimirdegtyarev157
@vladimirdegtyarev157 Жыл бұрын
cls - это сокращение от каких слов?
@selfedu_rus
@selfedu_rus Жыл бұрын
class
@user-qf7ld3vk6c
@user-qf7ld3vk6c 2 жыл бұрын
Ох, Сергей, опять декораторами завлёк!
@user-vm7zy7tw1j
@user-vm7zy7tw1j Жыл бұрын
Не совсем понял смысл этих методов. Ведь я могу вызвать для объекта, а не класса метод validate() v.validate(5). И в чем весь цимус?
@selfedu_rus
@selfedu_rus Жыл бұрын
здесь смысл, что вы можете вызывать метод validate непосредственно через класс: Vector.validate(5) а то что можно и из объекта: v.validate(5) никто не запрещает
@user-vm7zy7tw1j
@user-vm7zy7tw1j Жыл бұрын
@@selfedu_rus спасибо за ответ. Я понял что могу, просто пока сейчас на том уровне знания языка, что еще не понимаю зачем. То есть где это применимо.
@rahoti5765
@rahoti5765 Ай бұрын
Было не понятно, для чего вообще нужен декоратор, ведь по идее и без него бы всё хорошо работало, поэтому сам поигрался в VScode и вот что мы имеем: 1) Self и cls обычные переменные и могут быть названны как вам удобно, даже если сама среда разработки вам их автоматически ставит, вы можете их переименовать. Просто это общепринятые наименования. 2) Следуя из первого у нас получается, что если убрать декоратор classmethod, то cls превращается в условный self, которому нужна ссылка на экземпляр класса, иначе выдаёт ошибку о нехватке аргументов, если вызывается через сам класс. 3)Если декоратор стоит, при этом если вызывать метод класса через экземпляр класса, то всё работает так же прекрасно если и вызывать через сам класс. Но при этом, если в экземпляре класса переопределены поля, например: max_coord и min_coord, то ничего не изменется, так как cls при наличии декоратора неявно принимает аргументом ссылку на класс, от которого произошёл экземпляр, следовательно и использует его значения. как итог, получаем, что декоратор меняет логику неявного присваивания значений первым аргументам(self или cls)
@user-yb2rm6rb7i
@user-yb2rm6rb7i Жыл бұрын
Что за редактор используется?
@selfedu_rus
@selfedu_rus Жыл бұрын
Camtasia Studio
@user-yb2rm6rb7i
@user-yb2rm6rb7i Жыл бұрын
@@selfedu_rus tnx)
@user-yb2rm6rb7i
@user-yb2rm6rb7i Жыл бұрын
@@selfedu_rus оу, я не точно задал вопрос, я имел ввиду - "редактор кода")
@selfedu_rus
@selfedu_rus Жыл бұрын
@@user-yb2rm6rb7i PyCharm
@proskurlandsky
@proskurlandsky Жыл бұрын
Я не заметил, что поменяется, если декоратор staticmethod просто не писать. Просто написать метод, который не имеет параметра self или cls.
@selfedu_rus
@selfedu_rus Жыл бұрын
из staticmethod нельзя обратиться к локальный атрибутам объекта, т.к. на объект просто нет ссылки
@proskurlandsky
@proskurlandsky Жыл бұрын
@@selfedu_rus ну это некоторое ограничение на функционал. Но я уже понял, что оба этих декоратора по сути меняют то как метод воспринимает первый аргумент, и не важно как этот аргумент называется. Раньше я думал, что self и cls это ключевые слова. А оказывается что первый аргумент это всегда по умолчанию ссылка на экземпляр (за исключением метода ___new___ и мб еще каких-то магических). Спасибо за ответ и за плейлист)
@donfedor007
@donfedor007 2 жыл бұрын
Доброе время суток, не до конца понял для чего это(
@selfedu_rus
@selfedu_rus 2 жыл бұрын
далее будут примеры
@donfedor007
@donfedor007 2 жыл бұрын
@@selfedu_rus вопрос конечно не по теме , не подскажете , как сделать запрос Django ORM используя ForiegnKey в обратную сторону. Допустим есть модели к ним марки, сделать выборку по моделям и попутно зацепить марки в одном запросе ?
@donfedor007
@donfedor007 2 жыл бұрын
Если много зависимостей , то prefetch_related, если одна select_related может кому пригодиться ))
@MrArtlex
@MrArtlex 2 жыл бұрын
@@donfedor007 prefetch_related для many to many, select_related для many to one
@donfedor007
@donfedor007 2 жыл бұрын
@@MrArtlex так то я ответил уже))))
@snappesisnappes
@snappesisnappes Жыл бұрын
хм я делал атрибуты класса которые менялось от простых self функций и потом другой не не наследованный класс их читал чтобы делать че то, наверное я сделал что называется говнокод)
@user-xh7fl9hd2c
@user-xh7fl9hd2c Жыл бұрын
так зачем писать @classmethod @staticmethod если их убрать, то программа будет работать также.
@selfedu_rus
@selfedu_rus Жыл бұрын
так принято, если метод не использует локальные атрибуты объектов и класса, то статик, если только класса, то классовый, а иначе, как по умолчанию
@skiffsolo9419
@skiffsolo9419 2 жыл бұрын
А зачем нужны эти декораторы? Если их убрать все продолжает работать.
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Вам подробно об этом расскажет сообщество телеграм-канала (ссылка под видео)
@pal181
@pal181 2 жыл бұрын
А зачем тут декораторы? или без них это не работает?
@ya_novikov
@ya_novikov 2 жыл бұрын
работает, я проверил)
@RuchejAlex
@RuchejAlex Жыл бұрын
сколько ни читал про эти декораторы, всё равно не понимаю, на кой это надо
@selfedu_rus
@selfedu_rus Жыл бұрын
см. курс по Flask или Django, они там на каждом шагу ))
@vlvbeats517
@vlvbeats517 Жыл бұрын
Слишком быстро объясняешь для новичка, но в целом ок
@andreydr2861
@andreydr2861 2 жыл бұрын
Ойойой, то ли я тупой,но никак не могу это ООП понять. Уже много раз пересмотрел все видосы, ну никак!!!!
@mantrida
@mantrida 2 жыл бұрын
Вам нужно осознать, что в Пайтоне всё объект. Функция, класс, экземпляр класса, метод - всё это объекты. А имена (переменные) только ссылаются на эти объекты. И рассматривать всё в терминах создания в памяти объектов и ссылок на эти объекты. Если понимать что где когда создаётся и что на что ссылается, то ООП начинает казаться логичным ))) Если вы не можете ответить на вопросы (см. ниже), то скорей всего ООП дальше будет трудно понимать ) 1. Когда создаётся объект класса (не экземпляр класса, а именно объект самого класса) ? 2. Как происходит создание объекта экземпляра класса (это когда мы пишем pt = Point()) ? 3. Когда происходит создание объекта метода класса (то есть как функция внутри класса превращается в метод) ? 4. Что происходит при вызове метода класса ? 5. def foo(self): - что здесь такое self ?
@proxxxy01
@proxxxy01 2 жыл бұрын
Женя хорошо все описал, так что советую погуглить ответы на вопросы, если сам не знаешь. Но я попробую объяснить немного проще. По сути класс - это некий шаблон\комплектовщик методов для объекта. Например, нам надо создать машину(как объект) и дать возможность настраивать параметры для нее. Для этого можно создать класс, в котором можно, например, менять цвет и размер определенной машины, просто вызвав метод класса этой машины. т.е. class Car: def __init__(self, size, color): self.size = size self.color = color def change_color(self, color): self.color = color def change_size(self, size): self.size= size ## Метод для print def __str__(self): return f"Размер машины - {self.size} метров Цвет машины - {self.color}" Все. Теперь можно создавать сколько угодно таких машин и каждой, независимо от других, менять цвет и размер. Например: car1 = Car(1, "green") car2 = Car(2, "red") car1.change_color("blue") car2.change_size("black") print(f"Первая машина: {car1}") print(f"Вторая машина: {car2}") Как видишь - это два совершенно разных экземпляра, имеющие одинаковые методы, которые позволяют в разы проще, быстрее и лаконичнее менять их "личные" данные.
@andreydr2861
@andreydr2861 2 жыл бұрын
@@proxxxy01 Спасибо, теперь более понятно.
@agility3554
@agility3554 2 жыл бұрын
@@mantrida Пожалуй отвечу на ваши вопросы, если что не так пожалуйста поправьте. 1) Объект класса создается при его инициализации 2) Создание экземпляра - это то что вы указали в скобках. 3) Создание метода класса происходит при объявлении класса (при создании класса создаются его атрибуты, а функция, являющаяся атрибутом класса, является методом) 4) При вызове метода класса выводится возможность метода обращаться к экземпляру класса 5) Это параметр, который ссылается на экземпляр класса
@mantrida
@mantrida 2 жыл бұрын
@@agility3554 1) Объект класса создается при его инициализации Что такое инициализация класса ? Инициализация переменной знаю, это когда присваивается значение a = 5. А где инициализация класса ? 2) Создание экземпляра - это то что вы указали в скобках. Не конкретно, вопрос был как ? 3) Создание метода класса происходит при объявлении класса То есть вот мы пишем программу, объявили метод и он сразу создался в памяти ? Даже без запуска программы ? 4) При вызове метода класса выводится возможность метода обращаться Не понял что значит 'возможность метода обращаться' ? Метод это функция в которую передаются аргументы. Куда она обращается ? Пока что всё очень сильно расплывчато... Давайте конкретней )) Вот мы написали программу. И запустили её на выполнение. Ещё раз что именно происходит по этим 4 пунктам при запуске ? class A: def __init__(self, x): self.x = x def get_x(self): return self.x a = A(5) print(a.get_x()) 5) Это параметр, который ссылается на экземпляр класса А где вы видите класс ?: ))
@user-jw5yw3ch7q
@user-jw5yw3ch7q Жыл бұрын
ты тупо не объясняешь для чего они нужны ты пишешь на их основе точно такие же функции которые можно было бы написать и без них. Как понять тогда зачем они вообще нужны, не понятно где и для чего это пригодится
@nikudabeznego1035
@nikudabeznego1035 Жыл бұрын
Ничего не понятно… надо пересматривать до тошнотиков
@lt_academy
@lt_academy Жыл бұрын
Сижу и дкмаю - кто поставил ети дисслайки ..
@user-qe7dr1zp2x
@user-qe7dr1zp2x 7 ай бұрын
Я уже подумал что это у меня динамики дребезжат так противно, одел наушники такой же звук)
@nastyav3844
@nastyav3844 Жыл бұрын
Посмотрела аналогичное видео у Никиты Хохлова. Краткость сестра таланта. У вас все очень размыто, слишком много информации, конкретики мало.
@nastyav3844
@nastyav3844 Жыл бұрын
Не очень понятно объясняете, слишком быстро, примеры невнятные, очень жаль
@user-dj4np3gg9y
@user-dj4np3gg9y Жыл бұрын
Говор у тебя , как будто я передачу смотрю в мире животных
@northern_man_
@northern_man_ 11 ай бұрын
Я, кстати, заметил, что функции (подобно свойствам) можно использовать не только в качестве атрибута класса, но и в качестве локального атрибута экземпляра класса. Это как-то используется?
0% Respect Moments 😥
00:27
LE FOOT EN VIDÉO
Рет қаралды 23 МЛН
SMART GADGET FOR COOL PARENTS ☔️
00:30
123 GO! HOUSE
Рет қаралды 21 МЛН
Самый большой бутер в столовке! @krus-kos
00:42
Кушать Хочу
Рет қаралды 6 МЛН
Я прошел курс “Добрый, добрый Python”
10:31
Алготрейдинг на Python с нуля.
Рет қаралды 1,1 М.
Рекурсия в Python
52:13
Python Russian
Рет қаралды 2,4 М.
10 признаков того, что вы новичок в Python
4:59
Атрибуты класса, classmethod и staticmethod
44:40
Python Russian
Рет қаралды 4,5 М.
Python staticmethod and classmethod
7:35
mCoding
Рет қаралды 108 М.
0% Respect Moments 😥
00:27
LE FOOT EN VIDÉO
Рет қаралды 23 МЛН