Зашёл выразить благодарность по твоим урокам) правда я js, не питон разработчик… но все что ты говоришь - это четко, по делу, на профессиональном уровне. Всем кто проходит, то обязательно смотрите все, что можно здесь, человек знает своё дело и относится к нему как профессионал. Большое спасибо тебе за помощь, очень много интересного и полезного контента. Не бросай это дело)
Забавно, я столкнулся с этой темой в ходе экспериментов, задолго до этого урока. Специально нигде не смотрел. Мне Pycharm сам предложил использовать super(), когда у меня в связанных классах задублировались __init__ методы. Типа чувак, это не True, используй super(). Я попробовал, увидел как работает, сразу сообразил что да как. А тут целая тема с подробным объяснением! Спасибо большое за вашу работу! Добавил в свой профессиональный жаргон новые термины: делегирование вызовов, расширение и переопределение классов. Как устроюсь на работу, обязательно куплю этот курс на степике и пройду еще раз. Вы мой любимый учитель!)
Пайтон: Мы за явное лучше неявного!!! Также Пайтон: Ну у нас super() даёт ссылку на родительский класс, НО А ЕЩЁ ПУСКАЙ ОН БУДЕТ ПОДСТАВЛЯТЬ САМ SELF ВО ВСЕ МЕТОДЫ это ведь так ЯВНО!!
Урок #22 = Пройден В свой лексикон добавил несколько выражений: Переопределение методов, расширение классов, и делигирование :) Ну и оказывается, super возвращает объект класса. Это было интересно узнать
прямо по Лутцу..))) правда, там про super() не особо рассказывается, но если вчитаться внимательно, то становится очевидным применение этого метода...))))
Для тех кто на этой минуте видео - th-cam.com/video/BTV9esoCwEE/w-d-xo.html Хочет посмотреть какие переменные были созданы для объектов l и r Внимательно : сейчас в классе Rect не прописана строка - super().__init__(x1, x2, y1, y2) >>> l.__dict__ {'x1': 0, 'x2': 0, 'y1': 10, 'y2': 20} >>> r.__dict__ {'fill': 111} Поэтому при вызове - r.__dict__ мы видим - {'fill': 111} Но при явном вызове - th-cam.com/video/BTV9esoCwEE/w-d-xo.html прописав - super().__init__(x1, x2, y1, y2) >>> r.__dict__ {'x1': 1, 'x2': 2, 'y1': 3, 'y2': 4, 'fill': None}
Почему, если с помощью фунции super() мы хотим наследовать не все свойства родительского класса, а только некоторые(например x1, y1, x2) выдаёт ошибку TypeError? И как ее исправить, если мы не хотим наследовать все свойства родительского класса?
Для понимания упрощенно можно сказать, что часть работы, которую может выполнить,через super() делает базовый метод, а работу с которой не может справиться выполняет переопределенный метод в дочернем классе
Повторение мать учения 😁 Пересмотрел ещё разок. Много ещё уроков до финала? Ломал голову над фунтерами класса тут. Мета классы будут в плейлисте? Сенкью 👍😁
В целом все понятно за исключением одного момента, если () вызывает метод __call__, в котором определены последующие вызовы почему если мы переопределяем метод __call__ в самом классе он игнорируется и метод вызывается из метакласса.
и так, если при переопределении базового метода его функционал переписывается полностью, получается функция super() позволяет переопределять методы базового класса частично, оставляя функционал базового? сначала через super вызываешь базовый метод, как он отработал добавляешь новый функционал.
C помощью super() можно в дочерний класс перенести не все свойства родительского класса?(ведь в примере свойство fill из родительского перенеслось в дочерний, хотя в аргументах super его не прописывали)
Оказывается, super не всегда вызывает метод из базового класса. Ниже простенький пример. По идеи, должна была появится надпись "Я человек", а выводится "Я отец". Интересно, что если изменить имя метода answer в классе Father на любое другое, то super отработает как нада, т.е. вызовет метод answer из базового класса Human. class Human: def answer(self): return "Я человек" class Mother(Human): def who(self): print(super().answer()) class Father(Human): def answer(self): return "Я отец" class Son(Mother, Father): pass Son().who()
@@MrVovak85 Если что, Сергей в следующих видео тему развивает. А так, вкратце, super() прописан в одном классе, но вызывается для другого. В python 2 надо было обязательно явно передавать аргументы (дочерний класс, экземпляр) super(), а сейчас он их сам определяет.
Огромное спасибо за уроки! Хотелось бы попробовать спонсорство в знак благодарности, но мне другой блогер писал что в РФ с ютуб не выводятся деньги, есть ли смысл?
@@selfedu_rus, из Украины его теперь так просто не пополнишь, а онлайн обменники только от 1000 грн. переводы делают, поднакоплю и попробую перечислить позже 🙃
super() - это не функция (хотя я для простоты так говорю), это класс, который создает объект-посредник и он сам уже подставляет нужный self для родительских классов
Почему, если мы переопределяем __call__ у нас всё равно прекрасно отрабатывают __new__ и __init__? Я всё ещё не могу найти объяснения и понять это. Если смотреть на объяснение, то кажется, что зависимость прямая, но по факту мне кажется, это не так
1. При множественном наследовании это важно. 2. При редактировании программы удобно, чтобы при изменении имени базового класса не пришлось менять что то в дочерних.
Не помню, когда было сказано, что при создании экземпляра вызывается метод __call__(). И это кажется очень странным, ибо в предыдущих лекциях говорилось, что этот метод вызывается при обращении к экземпляру класса как к функции: l(). Мало того, если этот метод всё же вызывается при создании экземпляра, то переопределение этого метода должно было бы нарушить описанную логику создания экземпляра - но ведь этого не происходит !
@@selfedu_rus а в какой же лекции ранее это говорилось ? Вы же сказали "как уже говорили", а про метаклассы вроде бы ещё не было в этом курсе. Да и вообще такой темы я не видел в нём. Или я что-то пропустил ?
Зашёл выразить благодарность по твоим урокам) правда я js, не питон разработчик… но все что ты говоришь - это четко, по делу, на профессиональном уровне. Всем кто проходит, то обязательно смотрите все, что можно здесь, человек знает своё дело и относится к нему как профессионал. Большое спасибо тебе за помощь, очень много интересного и полезного контента. Не бросай это дело)
Забавно, я столкнулся с этой темой в ходе экспериментов, задолго до этого урока. Специально нигде не смотрел. Мне Pycharm сам предложил использовать super(), когда у меня в связанных классах задублировались __init__ методы. Типа чувак, это не True, используй super(). Я попробовал, увидел как работает, сразу сообразил что да как. А тут целая тема с подробным объяснением! Спасибо большое за вашу работу! Добавил в свой профессиональный жаргон новые термины: делегирование вызовов, расширение и переопределение классов. Как устроюсь на работу, обязательно куплю этот курс на степике и пройду еще раз. Вы мой любимый учитель!)
Как успехи?
Мне очень нравится Ваша подача материала. Спасибо большое!
Огромное спасибо! Очень внятно и понятно. После магических функций моя самооценка на таких видео восстанавливается
Спасибо. Блин. Наконец то понял. Еще раз огромное спасибо. Чётко, без лишней воды, без бла бла бла.
Как появится лишняя монетка - обязательно куплю курс на степике. Очень хороший материал, подача просто супер!
Ваши видео очень и очень помогают понять саму суть - и все становиться просто и понятно. Спасибо.
Спасибо, с вами начал ежедневно изучать питон, что долгие годы не получалось.
Уроки по делу, без воды, все последовательно. Подобных видеоуроков в интернете немного. Очень благодарен вашим стараниям!
Это лучшее объяснение, что я нашел во всем интернете! Огромное спасибо!
Последовательно, доходчиво, очень интересно! Очередное спасибо!
Классная подача - нет слов, спасибо
От души благодарю за такую качественную и подробную подачу материала!
Пайтон: Мы за явное лучше неявного!!!
Также Пайтон: Ну у нас super() даёт ссылку на родительский класс, НО А ЕЩЁ ПУСКАЙ ОН БУДЕТ ПОДСТАВЛЯТЬ САМ SELF ВО ВСЕ МЕТОДЫ это ведь так ЯВНО!!
Хорошая подача материала, спасибо автору за работу)
Очень хорошее объяснение, спасибо!!!
Спасибо большое за труд!
респект что лайкаешь комменты даже спустя год после выхода ролика)
Урок #22 = Пройден
В свой лексикон добавил несколько выражений: Переопределение методов, расширение классов, и делигирование :)
Ну и оказывается, super возвращает объект класса. Это было интересно узнать
о вашем канале должны узнавать все больше и больше людей
Спасибо, посмотрела!
Благодарю за урок!
прямо по Лутцу..))) правда, там про super() не особо рассказывается, но если вчитаться внимательно, то становится очевидным применение этого метода...))))
Супер объяснение!
Для тех кто на этой минуте видео - th-cam.com/video/BTV9esoCwEE/w-d-xo.html
Хочет посмотреть какие переменные были созданы для объектов l и r
Внимательно : сейчас в классе Rect не прописана строка - super().__init__(x1, x2, y1, y2)
>>> l.__dict__
{'x1': 0, 'x2': 0, 'y1': 10, 'y2': 20}
>>> r.__dict__
{'fill': 111}
Поэтому при вызове - r.__dict__ мы видим - {'fill': 111}
Но при явном вызове - th-cam.com/video/BTV9esoCwEE/w-d-xo.html
прописав - super().__init__(x1, x2, y1, y2)
>>> r.__dict__
{'x1': 1, 'x2': 2, 'y1': 3, 'y2': 4, 'fill': None}
Почему, если с помощью фунции super() мы хотим наследовать не все свойства родительского класса, а только некоторые(например x1, y1, x2) выдаёт ошибку TypeError? И как ее исправить, если мы не хотим наследовать все свойства родительского класса?
Для понимания упрощенно можно сказать, что часть работы, которую может выполнить,через super() делает базовый метод, а работу с которой не может справиться выполняет переопределенный метод в дочернем классе
Спасибо, все понятно!
Super урок про super()
Отлично!
В конце каждого урока по наследованию посещает мысль: "всячески избегайте наследования" )))
смсле ток 10 занятии осталось. Требую больше питона
Повторение мать учения 😁
Пересмотрел ещё разок.
Много ещё уроков до финала?
Ломал голову над фунтерами класса тут. Мета классы будут в плейлисте?
Сенкью 👍😁
еще где-то 10 занятий, метаклассы будут, естественно в конце
@@selfedu_rus ждём-с с нетерпением 😁
@@selfedu_rus Сергей, здравствуйте! Когда ориентировочно Вы выпустите курс по ООП на Stepik?
@@АлександрКаптуров-с8и пока не думал над этим, как будет сделаю объявление на канале
@@selfedu_rus Понял, очень жду. Ваши курсы классные!
Спасибо!
Просто super!
Топ курс!
Спасибо огромное!!
Почему перезалив?
Метод __call__ вызывается из метакласса type (в предыдущей версии сказал, что из object)
@@selfedu_rus спасибо!
отдельно еще хочу отметить очень прикольную музыку в конце, негатив от возможного непонимания купирует))
В целом все понятно за исключением одного момента, если () вызывает метод __call__, в котором определены последующие вызовы почему если мы переопределяем метод __call__ в самом классе он игнорируется и метод вызывается из метакласса.
Комментарии для поддержки канала 😌
и так, если при переопределении базового метода его функционал переписывается полностью, получается функция super() позволяет переопределять методы базового класса частично, оставляя функционал базового? сначала через super вызываешь базовый метод, как он отработал добавляешь новый функционал.
1:52 ошибка , для метода __new__ первый параметр cls ,а не self
да, верно, хотя это формальная ошибка, имя можно любое взять, но вы правы, self вводит в заблуждение, опечатка )
Спасибо вам * 100000000000 😄👍💪
C помощью super() можно в дочерний класс перенести не все свойства родительского класса?(ведь в примере свойство fill из родительского перенеслось в дочерний, хотя в аргументах super его не прописывали)
Класс
Оказывается, super не всегда вызывает метод из базового класса. Ниже простенький пример. По идеи, должна была появится надпись "Я человек", а выводится "Я отец". Интересно, что если изменить имя метода answer в классе Father на любое другое, то super отработает как нада, т.е. вызовет метод answer из базового класса Human.
class Human:
def answer(self):
return "Я человек"
class Mother(Human):
def who(self):
print(super().answer())
class Father(Human):
def answer(self):
return "Я отец"
class Son(Mother, Father):
pass
Son().who()
Э-э-э... Вполне себе вызывает метод из базового (для Son) класса. Почему бы super() тут взяло неявным аргументом класс Mother?
@@Ghotierr если честно, то ничего не понял, что вы написали))
@@ВячаФродо скоро в продаже моя новая книга "Искусство быть непонятым". На сим спешу откланяться.
@@Ghotierr кто-нибудь может обьяснить, почему так происходит и выводится "Я отец", а не "Я человек"?
@@MrVovak85 Если что, Сергей в следующих видео тему развивает. А так, вкратце, super() прописан в одном классе, но вызывается для другого. В python 2 надо было обязательно явно передавать аргументы (дочерний класс, экземпляр) super(), а сейчас он их сам определяет.
спасибо
А где был вызван инициализатор для line
Огромное спасибо за уроки! Хотелось бы попробовать спонсорство в знак благодарности, но мне другой блогер писал что в РФ с ютуб не выводятся деньги, есть ли смысл?
Спасибо! Да, у нас монетизации сейчас нет. Поэтому только на Юмани-кошелек (он в описании канала).
@@selfedu_rus, из Украины его теперь так просто не пополнишь, а онлайн обменники только от 1000 грн. переводы делают, поднакоплю и попробую перечислить позже 🙃
👍👍
Спасибо!
А почему в super.__init__() не требуется передавать self? Ведь для __init__ родительского класса также нужен объект
super() - это не функция (хотя я для простоты так говорю), это класс, который создает объект-посредник и он сам уже подставляет нужный self для родительских классов
Почему, если мы переопределяем __call__ у нас всё равно прекрасно отрабатывают __new__ и __init__?
Я всё ещё не могу найти объяснения и понять это.
Если смотреть на объяснение, то кажется, что зависимость прямая, но по факту мне кажется, это не так
При переопределении __call__ в классе, этот метод будет вызываться только для экземпляров, не не для самого класса.
Изменить name=Geom в дочернем классе можно?
Как иерархии наследования изменяться, если я укажу базовый класс внутри дочернего, просто не совсем понимаю, почему это нежелательно. Спасибо
1. При множественном наследовании это важно.
2. При редактировании программы удобно, чтобы при изменении имени базового класса не пришлось менять что то в дочерних.
@@selfedu_rus понял, спасибо!
Good!!
А когда мы наследуем от класса pygame.sprite.Sprite , мы можем также указать в дочернем классе ф-ию super()?
указать можно, главное, чтобы это все работало, т.к. унаследоваться можно от нескольких классов, например
Не помню, когда было сказано, что при создании экземпляра вызывается метод __call__(). И это кажется очень странным, ибо в предыдущих лекциях говорилось, что этот метод вызывается при обращении к экземпляру класса как к функции: l(). Мало того, если этот метод всё же вызывается при создании экземпляра, то переопределение этого метода должно было бы нарушить описанную логику создания экземпляра - но ведь этого не происходит !
метод call() метакласса, а не тот, что может быть прописан в самом классе
@@selfedu_rus а в какой же лекции ранее это говорилось ? Вы же сказали "как уже говорили", а про метаклассы вроде бы ещё не было в этом курсе. Да и вообще такой темы я не видел в нём. Или я что-то пропустил ?
@@ВадимСухотин-ю5д наверное, нет, не пропустили, вроде явно не говорил
у меня вопрос не по теме. Вы работаете программистом или ютубером или кем то другим?
Основная работа в IT (скорее руководитель) + преподавание в вузе + ютуб (но это уже как хобби). Детали не конкретизирую ))
@@selfedu_rus стоп ,а как вы так все совмещаете?
@@flizef6363 тайминг - великая вещь ))
2:06 слышно собачку)
call жу вызываетс у класса, а не у экземпляра)
у объектов класса
Замечание автору видео. Зачем так быстро всё говорить, и перемещаться по экрану. Реально ничего не успеть уловить при такой подаче материала.
Немного сложно уловить смысл из-за лексики😅
вообще ничего не понятно
Спасибо большое!!!
Спасибо
Спасибо. Все понятно.
спасибо
Спасибо
спасибо