#20. Наследование в объектно-ориентированном программировании | ООП Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ธ.ค. 2021
  • Курс по Python ООП: stepik.org/a/116336
    Как реализуется механизм наследования в языке Python. Примеры наследования классов, зачем это нужно, переопределение (overriding) методов и свойств.
    Инфо-сайт: proproprogs.ru/python_oop
    Telegram-канал: t.me/python_selfedu

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

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

    Оффтоп: Оказывется на степике теперь за прохождение курса Добрый добрый Пайтон выдаётся сертификат!

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

    вот это я понимаю человечище. На все ответил ,все вопросы разжевал. Спасибо тебе огромное. Сложное так объяснить по простому, у вас талант!

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

    Отличная подача, все понятно, разжевано до мелочей. Если кто-то говорит про сложность примеров в уроках, тот этот кто-то просто лениться с учебой. Или не умеет учиться. Урок надо не только смотреть, но и конспектировать своими словами в тетрадочке важные моменты. А потом просмотреть еще раз, но уже с открытым пайчармом, чтобы все самому попробовать. И напоследок - поиграться с кодом самому. Попробовать поэкспериментировать. Придумать свои классы и свою задачку, чтобы опробовать знание в деле. Можно взять пример из предыдущего урока и реализовать его, используя то что изучил в этом уроке. И т.д.. У меня каждый ролик отнимает не 6-15 минут, а 1-3ч занятий. Порой на 2 занятия 1 урок растягиваю или даже на 3. Простым просмотром видосиков ничему не научишься. Даже если все понимаешь. Ну и забудется быстро все, без практики.

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

    Сергей, наконец то я дошел до наследования, как обещал даю обратную связь😌 сначало по ролику с наследованием это хороший обучающий ролик в котором будет все понятно новичкам👍😌 по поводу старого набора роликов про ООП и нового можно сразу сказать, что новый лучше так как вы стали ещё более подробно обьяснять как и что происходит особенно на картинках со стрелочками , огромное спасибо за проделанную работу, работа точно проделана не зря мне данный материал точно помог. Так же если говорить о каких либо недостатках то я вижу, что от первого до 20го ролика интерес аудитории падает возможно людям тяжеловато воспринимать большие конструкции из кода (лично мне как с человеку с опытом понятно, то о чем вы говорите особенно в новых роликах ) но новичков это скорее всего отпугивает и тут наверное однозначного решения нет (типа если это сложно то и нечего делать в программировании) но возможно было бы полезнее после вводного урока сначала показать объяснить базовые пункты ООП инкапсуляция, наследование и полиморфизм что бы новички хотяб базу поняли а потом отвалились 😁ну и дальше уже по методам кому интересно😌не подумайте что я придираюсь просто хочу с вами честно поделиться своим мнением, я очень уважаю то, что вы делаете и ещё раз ОГРОМНОЕ ВАМ СПАСИБО 👍😌

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

      Хотя понятно почему ролики именно так расположенные, чтобы дать знание человеку для объяснения будущих тем , эх просто печально, что на наследовании просмотров настолько меньше, а это я ещё до полиморфизма не дошел(((

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

      Спасибо! Спад аудитории происходит во всех моих курсах. Так уж устроен наш образовательный мир ))

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

      @@selfedu_rus по-моем вы в одном из роликов говорили, что дорогу осилит идущий 😌 очень в тему , так и живём😁

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

      Какие новички? Вы о чем? Люди дошли до ООП, до наследования, они априори не новички, а как минимум уже хорошо должны понимать язык. Да конечно, если пройти базу типа списков, строк, if, for, и сразу прыгнуть сюда это будет треш. Ну и по честному первый курс Сергея он слишком поверхностен и короток, после него сразу в ООП идти бессмысленно. Нужно еще пару тройку курсов по основам пройти и на степике они есть. Хотя задачи по сложности самые трудные в курсах Сергея. ООП данный курс просто бомба!

  • @zakirovio
    @zakirovio 11 หลายเดือนก่อน +3

    здорово! пока что лучшее объяснение механизма наследования среди всех что я читал)

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

    уроки ООП Python просто супер

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

    Сергей, спасибо огромное. Продолжаем грызть гранит науки. По этому ролику вроде все хорошо зашло. Да и вообще стал проходить не по одному уроку, а по два в день. Так как уже лучше все усваивается) Еще раз спасибо вам!

  • @user-wn4nj6lq9q
    @user-wn4nj6lq9q 2 ปีที่แล้ว +4

    Ну тут надо однозначно поставить лайк)

  • @user-xi3uv5tn5y
    @user-xi3uv5tn5y 2 ปีที่แล้ว +4

    отличное объяснение темы, все разложено и очень легко воспринимается!

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

    опа,наследование,уже 20 урок, спасибо огромное, все понял❤

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

    Большое спасибо! Ваш курс по ООП одно из лучших на степике, что есть по пайтону. Хотя есть и известные конкуренты. Но и вы и они не взаимоисключение, а дополнение. Спасибо!

  • @user-bw4xg8tb9r
    @user-bw4xg8tb9r 2 ปีที่แล้ว +2

    Шикарно, спасибо!
    Сначала даже не хотел смотреть первый урок раздела "Наследования". Думал, что ничего нового не услышу. Но нюансы настолько интересно освещены, что не пожалел ни об одной просмотренной минуте))

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

    Спасибо за эти прекрасные уроки

  • @lexacactus-qf6if
    @lexacactus-qf6if 4 หลายเดือนก่อน +1

    Спасибо большое, сэкономил полтора часа

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

    Очередное спасибо вам! для зрителей канала, открою лайфХак как вызывать в методах базового класса поля и метолы классов наследников не опасаясь что программа сломается, делать проверку if isinstance(self, (Line, Rect)): self.draw().
    ну это шутка конечно)

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

    спасибо

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

    лайк и и комментарий в поддержку канала.

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

    Отлично изложено. Автору поклон за труды! Еще бы задачи закрепляющие и куда-нибудь на степик курс - получился бы лучший курс по ООП на русском языке за который можно и денег отдать.

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

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

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

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

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

    Кстати, такой нюанс: в примере, где self.draw() находиться в родительском классеbe (время 8:53), у меня выдает ошибку:
    "TypeError: Line.draw() missing 1 required positionalument: 'self'"
    И чтобы сработало так, как на видео, мне приходится прямо указывать аргумент для self.draw(). Это не критично для учебы. Возможно, у меня просто более новая версия python
    P.s. Я прекрасно понял посыл автора, что нельзя в родительском классе делать вызов атрибута из дочернего класса. Но это не отменяет того, что для учебы стоит повторить весь код урока самостоятельно.

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

    Спасибо, хорошо объяснено!

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

    спасибо за урок

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

    Спасибо!

  • @user-br7hg4by2j
    @user-br7hg4by2j 2 ปีที่แล้ว +3

    Спасибо за очередной урок! Кружочек со стрелочкой вниз напротив класса Geom похоже означает, что класс Geom наследуется другими классами. Странно, для переопределяемых в потомках методов среда в базовом классе показывает стрелочку вниз напротив метода, а для переменных (переопределяемых в потомках) почему-то нет.

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

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

    • @user-br7hg4by2j
      @user-br7hg4by2j 2 ปีที่แล้ว

      @@selfedu_rus Я имел в виду, что стрелочки показываются не для всех переопределяемых атрибутов класса, а только для методов.

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

    👍👍

  • @user-xc9no9hd4i
    @user-xc9no9hd4i 2 ปีที่แล้ว

    А разве у нас не создаются экземпляры L, R и G когда мы вызываем функцию set_cord?

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

      set_coords() создает локальные атрибуты x1, y1, x2, y2 внутри текущего объекта класса, больше ничего

  • @user-cm1ri1sn2u
    @user-cm1ri1sn2u ปีที่แล้ว +1

    1:20 Сергей, разве мы расширяем класс Geom классом Line? Мне кажется, что наоборот, мы расширяем класс Line классом Geom, ведь именно в Line появляются новые методы и свойства из Geom'а, а не наоборот

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

      Ну а как можно расширить класс (Line), которого еще нет? ))

    • @user-cm1ri1sn2u
      @user-cm1ri1sn2u ปีที่แล้ว

      @@selfedu_rus хорошо, пойдём от обратного, чем расширился класс Geom? Свойства и методы дочерних классов ему недоступны, а у дочерних напротив, функционал шире, за счёт унаследованных методов и своих собственных.

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

      @@user-cm1ri1sn2u я понимаю так, что есть исходный базовый класс Geom, мы хотим получить более широкий функционал, поэтому на его базе создаем дочерний с дополнительными новыми атрибутами

  • @johnmazepa
    @johnmazepa 10 หลายเดือนก่อน

    Вы забыли рассказать про синтаксис написания __init__() в дочерних классах, если часть аргументов принимается через __init__() родительского.
    Почему я разбухтелся? Потому, что в задачках к теме Вы об этом аспекте не забыли)))

    • @johnmazepa
      @johnmazepa 10 หลายเดือนก่อน

      class Animal:
      def __init__(self, name, age):
      self.name = name
      self.age = age
      class Cat(Animal):
      def __init__(self, name, age, color, weight):
      super().__init__(name, age) #без этой строчки не работает
      self.color = color
      self.weight = weight

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

    Внимание спойлер! Смотрите о Diamond Problem и МRО в следующем занятии.

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

    неработает

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

    class geom():
    def __init__(self,name):
    #self.name=name
    self.name='deeoommmee'
    class line():
    def draw(self):
    print('linija---')
    geom1=geom('')
    print(geom1.name)
    line1=line()
    line1.draw()