#22. Наследование. Функция super() и делегирование | ООП Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ม.ค. 2025

ความคิดเห็น • 102

  • @-web2378
    @-web2378 3 ปีที่แล้ว +66

    Зашёл выразить благодарность по твоим урокам) правда я js, не питон разработчик… но все что ты говоришь - это четко, по делу, на профессиональном уровне. Всем кто проходит, то обязательно смотрите все, что можно здесь, человек знает своё дело и относится к нему как профессионал. Большое спасибо тебе за помощь, очень много интересного и полезного контента. Не бросай это дело)

  • @Watcherfromfar
    @Watcherfromfar 9 หลายเดือนก่อน +10

    Забавно, я столкнулся с этой темой в ходе экспериментов, задолго до этого урока. Специально нигде не смотрел. Мне Pycharm сам предложил использовать super(), когда у меня в связанных классах задублировались __init__ методы. Типа чувак, это не True, используй super(). Я попробовал, увидел как работает, сразу сообразил что да как. А тут целая тема с подробным объяснением! Спасибо большое за вашу работу! Добавил в свой профессиональный жаргон новые термины: делегирование вызовов, расширение и переопределение классов. Как устроюсь на работу, обязательно куплю этот курс на степике и пройду еще раз. Вы мой любимый учитель!)

    • @rocker5652
      @rocker5652 4 หลายเดือนก่อน

      Как успехи?

  • @MB-mi4ed
    @MB-mi4ed 5 หลายเดือนก่อน +4

    Мне очень нравится Ваша подача материала. Спасибо большое!

  • @ВладиславАндреев-э8т
    @ВладиславАндреев-э8т 2 ปีที่แล้ว +15

    Огромное спасибо! Очень внятно и понятно. После магических функций моя самооценка на таких видео восстанавливается

  • @EvgeniySakharov
    @EvgeniySakharov ปีที่แล้ว +4

    Спасибо. Блин. Наконец то понял. Еще раз огромное спасибо. Чётко, без лишней воды, без бла бла бла.

  • @alexhayes4253
    @alexhayes4253 2 ปีที่แล้ว +7

    Как появится лишняя монетка - обязательно куплю курс на степике. Очень хороший материал, подача просто супер!

  • @АлександрЛобанов-о2у
    @АлександрЛобанов-о2у ปีที่แล้ว +8

    Ваши видео очень и очень помогают понять саму суть - и все становиться просто и понятно. Спасибо.

  • @studian505
    @studian505 9 หลายเดือนก่อน +1

    Спасибо, с вами начал ежедневно изучать питон, что долгие годы не получалось.

  • @aabema
    @aabema ปีที่แล้ว +5

    Уроки по делу, без воды, все последовательно. Подобных видеоуроков в интернете немного. Очень благодарен вашим стараниям!

  • @MrUriel2
    @MrUriel2 2 ปีที่แล้ว +3

    Это лучшее объяснение, что я нашел во всем интернете! Огромное спасибо!

  • @siarheiulas6969
    @siarheiulas6969 ปีที่แล้ว +8

    Последовательно, доходчиво, очень интересно! Очередное спасибо!

  • @АндрейТюляков-ю9о
    @АндрейТюляков-ю9о ปีที่แล้ว +6

    Классная подача - нет слов, спасибо

  • @kstrukov1994
    @kstrukov1994 ปีที่แล้ว +2

    От души благодарю за такую качественную и подробную подачу материала!

  • @silkshop
    @silkshop 8 หลายเดือนก่อน +4

    Пайтон: Мы за явное лучше неявного!!!
    Также Пайтон: Ну у нас super() даёт ссылку на родительский класс, НО А ЕЩЁ ПУСКАЙ ОН БУДЕТ ПОДСТАВЛЯТЬ САМ SELF ВО ВСЕ МЕТОДЫ это ведь так ЯВНО!!

  • @золотая_рыбка
    @золотая_рыбка 3 ปีที่แล้ว +7

    Хорошая подача материала, спасибо автору за работу)

  • @Nick-py7iy
    @Nick-py7iy ปีที่แล้ว +5

    Очень хорошее объяснение, спасибо!!!

  • @taran_dm
    @taran_dm หลายเดือนก่อน +1

    Спасибо большое за труд!

  • @IlyaNad
    @IlyaNad ปีที่แล้ว +1

    респект что лайкаешь комменты даже спустя год после выхода ролика)

  • @jaksonmillka
    @jaksonmillka 3 หลายเดือนก่อน +1

    Урок #22 = Пройден
    В свой лексикон добавил несколько выражений: Переопределение методов, расширение классов, и делигирование :)
    Ну и оказывается, super возвращает объект класса. Это было интересно узнать

  • @citricmint6180
    @citricmint6180 2 ปีที่แล้ว +5

    о вашем канале должны узнавать все больше и больше людей

  • @sofiipochta
    @sofiipochta 2 หลายเดือนก่อน +1

    Спасибо, посмотрела!

  • @clqwnlesslxrd
    @clqwnlesslxrd ปีที่แล้ว +2

    Благодарю за урок!

  • @ивансмирнов-г5л
    @ивансмирнов-г5л 3 ปีที่แล้ว +1

    прямо по Лутцу..))) правда, там про super() не особо рассказывается, но если вчитаться внимательно, то становится очевидным применение этого метода...))))

  • @jurijslomonovskis4090
    @jurijslomonovskis4090 2 ปีที่แล้ว +2

    Супер объяснение!

  • @gbo4net
    @gbo4net ปีที่แล้ว +1

    Для тех кто на этой минуте видео - 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}

  • @user-LvSerg777
    @user-LvSerg777 8 หลายเดือนก่อน +2

    Почему, если с помощью фунции super() мы хотим наследовать не все свойства родительского класса, а только некоторые(например x1, y1, x2) выдаёт ошибку TypeError? И как ее исправить, если мы не хотим наследовать все свойства родительского класса?

  • @zakirovio
    @zakirovio ปีที่แล้ว +3

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

  • @qwertymegaforce9088
    @qwertymegaforce9088 2 ปีที่แล้ว +2

    Спасибо, все понятно!

  • @donfedor007
    @donfedor007 2 ปีที่แล้ว +2

    Super урок про super()

  • @drugprirody-j6l
    @drugprirody-j6l 9 หลายเดือนก่อน +1

    Отлично!

  • @nikprilutskiy7064
    @nikprilutskiy7064 ปีที่แล้ว +2

    В конце каждого урока по наследованию посещает мысль: "всячески избегайте наследования" )))

  • @Akpaid
    @Akpaid 3 ปีที่แล้ว +3

    смсле ток 10 занятии осталось. Требую больше питона

  • @ИгорьЛатуха
    @ИгорьЛатуха 3 ปีที่แล้ว +2

    Повторение мать учения 😁
    Пересмотрел ещё разок.
    Много ещё уроков до финала?
    Ломал голову над фунтерами класса тут. Мета классы будут в плейлисте?
    Сенкью 👍😁

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +3

      еще где-то 10 занятий, метаклассы будут, естественно в конце

    • @ИгорьЛатуха
      @ИгорьЛатуха 3 ปีที่แล้ว +2

      @@selfedu_rus ждём-с с нетерпением 😁

    • @АлександрКаптуров-с8и
      @АлександрКаптуров-с8и 3 ปีที่แล้ว +1

      @@selfedu_rus Сергей, здравствуйте! Когда ориентировочно Вы выпустите курс по ООП на Stepik?

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +3

      @@АлександрКаптуров-с8и пока не думал над этим, как будет сделаю объявление на канале

    • @АлександрКаптуров-с8и
      @АлександрКаптуров-с8и 3 ปีที่แล้ว +4

      @@selfedu_rus Понял, очень жду. Ваши курсы классные!

  • @narvere
    @narvere 2 ปีที่แล้ว +1

    Спасибо!

  • @aston585
    @aston585 ปีที่แล้ว +1

    Просто super!

  • @СергейНауменко-ь6н
    @СергейНауменко-ь6н ปีที่แล้ว +1

    Топ курс!

  • @ЕрвандАгаджанян-в3к
    @ЕрвандАгаджанян-в3к 2 ปีที่แล้ว +1

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

  • @gienek_mscislawski
    @gienek_mscislawski 3 ปีที่แล้ว +6

    Почему перезалив?

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +10

      Метод __call__ вызывается из метакласса type (в предыдущей версии сказал, что из object)

    • @gienek_mscislawski
      @gienek_mscislawski 3 ปีที่แล้ว +3

      @@selfedu_rus спасибо!

  • @ВладиславАндреев-э8т
    @ВладиславАндреев-э8т 2 ปีที่แล้ว +2

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

  • @Ioome23
    @Ioome23 5 หลายเดือนก่อน

    В целом все понятно за исключением одного момента, если () вызывает метод __call__, в котором определены последующие вызовы почему если мы переопределяем метод __call__ в самом классе он игнорируется и метод вызывается из метакласса.

  • @Dayplaylist
    @Dayplaylist 2 ปีที่แล้ว +1

    Комментарии для поддержки канала 😌

  • @zakirovio
    @zakirovio ปีที่แล้ว +1

    и так, если при переопределении базового метода его функционал переписывается полностью, получается функция super() позволяет переопределять методы базового класса частично, оставляя функционал базового? сначала через super вызываешь базовый метод, как он отработал добавляешь новый функционал.

  • @entel666
    @entel666 2 ปีที่แล้ว +3

    1:52 ошибка , для метода __new__ первый параметр cls ,а не self

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว +2

      да, верно, хотя это формальная ошибка, имя можно любое взять, но вы правы, self вводит в заблуждение, опечатка )

  • @БелыйХакер-в8щ
    @БелыйХакер-в8щ 2 ปีที่แล้ว +1

    Спасибо вам * 100000000000 😄👍💪

  • @gore_ot_uma166
    @gore_ot_uma166 2 ปีที่แล้ว +2

    C помощью super() можно в дочерний класс перенести не все свойства родительского класса?(ведь в примере свойство fill из родительского перенеслось в дочерний, хотя в аргументах super его не прописывали)

  • @realmanproject7529
    @realmanproject7529 3 ปีที่แล้ว +2

    Класс

  • @ВячаФродо
    @ВячаФродо ปีที่แล้ว +3

    Оказывается, 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()

    • @Ghotierr
      @Ghotierr ปีที่แล้ว

      Э-э-э... Вполне себе вызывает метод из базового (для Son) класса. Почему бы super() тут взяло неявным аргументом класс Mother?

    • @ВячаФродо
      @ВячаФродо ปีที่แล้ว

      @@Ghotierr если честно, то ничего не понял, что вы написали))

    • @Ghotierr
      @Ghotierr ปีที่แล้ว

      @@ВячаФродо скоро в продаже моя новая книга "Искусство быть непонятым". На сим спешу откланяться.

    • @MrVovak85
      @MrVovak85 ปีที่แล้ว

      @@Ghotierr кто-нибудь может обьяснить, почему так происходит и выводится "Я отец", а не "Я человек"?

    • @Ghotierr
      @Ghotierr ปีที่แล้ว

      @@MrVovak85 Если что, Сергей в следующих видео тему развивает. А так, вкратце, super() прописан в одном классе, но вызывается для другого. В python 2 надо было обязательно явно передавать аргументы (дочерний класс, экземпляр) super(), а сейчас он их сам определяет.

  • @Alexey-f7d
    @Alexey-f7d 2 ปีที่แล้ว +1

    спасибо

  • @ХусейнНаимов-ю3г
    @ХусейнНаимов-ю3г 2 ปีที่แล้ว

    А где был вызван инициализатор для line

  • @tanyadiduk3640
    @tanyadiduk3640 ปีที่แล้ว +1

    Огромное спасибо за уроки! Хотелось бы попробовать спонсорство в знак благодарности, но мне другой блогер писал что в РФ с ютуб не выводятся деньги, есть ли смысл?

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว

      Спасибо! Да, у нас монетизации сейчас нет. Поэтому только на Юмани-кошелек (он в описании канала).

    • @tanyadiduk3640
      @tanyadiduk3640 ปีที่แล้ว

      @@selfedu_rus, из Украины его теперь так просто не пополнишь, а онлайн обменники только от 1000 грн. переводы делают, поднакоплю и попробую перечислить позже 🙃

  • @ibrahimoglu
    @ibrahimoglu 3 ปีที่แล้ว +2

    👍👍

  • @СергейФролов-ъ5я
    @СергейФролов-ъ5я 3 ปีที่แล้ว +1

    Спасибо!
    А почему в super.__init__() не требуется передавать self? Ведь для __init__ родительского класса также нужен объект

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +4

      super() - это не функция (хотя я для простоты так говорю), это класс, который создает объект-посредник и он сам уже подставляет нужный self для родительских классов

  • @letronas
    @letronas ปีที่แล้ว +1

    Почему, если мы переопределяем __call__ у нас всё равно прекрасно отрабатывают __new__ и __init__?
    Я всё ещё не могу найти объяснения и понять это.
    Если смотреть на объяснение, то кажется, что зависимость прямая, но по факту мне кажется, это не так

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว

      При переопределении __call__ в классе, этот метод будет вызываться только для экземпляров, не не для самого класса.

  • @donfedor007
    @donfedor007 2 ปีที่แล้ว +1

    Изменить name=Geom в дочернем классе можно?

  • @xilagos
    @xilagos ปีที่แล้ว +1

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

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +1

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

    • @xilagos
      @xilagos ปีที่แล้ว

      @@selfedu_rus понял, спасибо!

  • @Anonim-im6ln
    @Anonim-im6ln ปีที่แล้ว

    Good!!

  • @teacherit5840
    @teacherit5840 2 ปีที่แล้ว

    А когда мы наследуем от класса pygame.sprite.Sprite , мы можем также указать в дочернем классе ф-ию super()?

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว

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

  • @ВадимСухотин-ю5д
    @ВадимСухотин-ю5д 2 ปีที่แล้ว

    Не помню, когда было сказано, что при создании экземпляра вызывается метод __call__(). И это кажется очень странным, ибо в предыдущих лекциях говорилось, что этот метод вызывается при обращении к экземпляру класса как к функции: l(). Мало того, если этот метод всё же вызывается при создании экземпляра, то переопределение этого метода должно было бы нарушить описанную логику создания экземпляра - но ведь этого не происходит !

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว

      метод call() метакласса, а не тот, что может быть прописан в самом классе

    • @ВадимСухотин-ю5д
      @ВадимСухотин-ю5д 2 ปีที่แล้ว

      @@selfedu_rus а в какой же лекции ранее это говорилось ? Вы же сказали "как уже говорили", а про метаклассы вроде бы ещё не было в этом курсе. Да и вообще такой темы я не видел в нём. Или я что-то пропустил ?

    • @selfedu_rus
      @selfedu_rus  2 ปีที่แล้ว

      @@ВадимСухотин-ю5д наверное, нет, не пропустили, вроде явно не говорил

  • @flizef6363
    @flizef6363 3 ปีที่แล้ว

    у меня вопрос не по теме. Вы работаете программистом или ютубером или кем то другим?

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +3

      Основная работа в IT (скорее руководитель) + преподавание в вузе + ютуб (но это уже как хобби). Детали не конкретизирую ))

    • @flizef6363
      @flizef6363 3 ปีที่แล้ว

      @@selfedu_rus стоп ,а как вы так все совмещаете?

    • @selfedu_rus
      @selfedu_rus  3 ปีที่แล้ว +2

      @@flizef6363 тайминг - великая вещь ))

  • @АрсланОчиров-щ5д
    @АрсланОчиров-щ5д 2 ปีที่แล้ว

    2:06 слышно собачку)

  • @bobby_ridge
    @bobby_ridge 5 หลายเดือนก่อน +1

    call жу вызываетс у класса, а не у экземпляра)

    • @selfedu_rus
      @selfedu_rus  5 หลายเดือนก่อน +1

      у объектов класса

  • @ruslanmusifullin8436
    @ruslanmusifullin8436 ปีที่แล้ว +1

    Замечание автору видео. Зачем так быстро всё говорить, и перемещаться по экрану. Реально ничего не успеть уловить при такой подаче материала.

  • @reclreclur7203
    @reclreclur7203 ปีที่แล้ว +1

    Немного сложно уловить смысл из-за лексики😅

  • @Good_nick_name
    @Good_nick_name 3 หลายเดือนก่อน +1

    вообще ничего не понятно

  • @igorratnik2357
    @igorratnik2357 ปีที่แล้ว +1

    Спасибо большое!!!

  • @predatel_rodini
    @predatel_rodini 2 ปีที่แล้ว +1

    Спасибо

  • @andredru4278
    @andredru4278 10 หลายเดือนก่อน +1

    Спасибо. Все понятно.

  • @abrorizzatullaev836
    @abrorizzatullaev836 2 ปีที่แล้ว +1

    спасибо

  • @jamjam3337
    @jamjam3337 ปีที่แล้ว +1

    Спасибо

  • @marines8725
    @marines8725 2 หลายเดือนก่อน +1

    спасибо