#20. Наследование в объектно-ориентированном программировании | ООП Python
ฝัง
- เผยแพร่เมื่อ 20 ธ.ค. 2021
- Курс по Python ООП: stepik.org/a/116336
Как реализуется механизм наследования в языке Python. Примеры наследования классов, зачем это нужно, переопределение (overriding) методов и свойств.
Инфо-сайт: proproprogs.ru/python_oop
Telegram-канал: t.me/python_selfedu
Оффтоп: Оказывется на степике теперь за прохождение курса Добрый добрый Пайтон выдаётся сертификат!
вот это я понимаю человечище. На все ответил ,все вопросы разжевал. Спасибо тебе огромное. Сложное так объяснить по простому, у вас талант!
Отличная подача, все понятно, разжевано до мелочей. Если кто-то говорит про сложность примеров в уроках, тот этот кто-то просто лениться с учебой. Или не умеет учиться. Урок надо не только смотреть, но и конспектировать своими словами в тетрадочке важные моменты. А потом просмотреть еще раз, но уже с открытым пайчармом, чтобы все самому попробовать. И напоследок - поиграться с кодом самому. Попробовать поэкспериментировать. Придумать свои классы и свою задачку, чтобы опробовать знание в деле. Можно взять пример из предыдущего урока и реализовать его, используя то что изучил в этом уроке. И т.д.. У меня каждый ролик отнимает не 6-15 минут, а 1-3ч занятий. Порой на 2 занятия 1 урок растягиваю или даже на 3. Простым просмотром видосиков ничему не научишься. Даже если все понимаешь. Ну и забудется быстро все, без практики.
Сергей, наконец то я дошел до наследования, как обещал даю обратную связь😌 сначало по ролику с наследованием это хороший обучающий ролик в котором будет все понятно новичкам👍😌 по поводу старого набора роликов про ООП и нового можно сразу сказать, что новый лучше так как вы стали ещё более подробно обьяснять как и что происходит особенно на картинках со стрелочками , огромное спасибо за проделанную работу, работа точно проделана не зря мне данный материал точно помог. Так же если говорить о каких либо недостатках то я вижу, что от первого до 20го ролика интерес аудитории падает возможно людям тяжеловато воспринимать большие конструкции из кода (лично мне как с человеку с опытом понятно, то о чем вы говорите особенно в новых роликах ) но новичков это скорее всего отпугивает и тут наверное однозначного решения нет (типа если это сложно то и нечего делать в программировании) но возможно было бы полезнее после вводного урока сначала показать объяснить базовые пункты ООП инкапсуляция, наследование и полиморфизм что бы новички хотяб базу поняли а потом отвалились 😁ну и дальше уже по методам кому интересно😌не подумайте что я придираюсь просто хочу с вами честно поделиться своим мнением, я очень уважаю то, что вы делаете и ещё раз ОГРОМНОЕ ВАМ СПАСИБО 👍😌
Хотя понятно почему ролики именно так расположенные, чтобы дать знание человеку для объяснения будущих тем , эх просто печально, что на наследовании просмотров настолько меньше, а это я ещё до полиморфизма не дошел(((
Спасибо! Спад аудитории происходит во всех моих курсах. Так уж устроен наш образовательный мир ))
@@selfedu_rus по-моем вы в одном из роликов говорили, что дорогу осилит идущий 😌 очень в тему , так и живём😁
Какие новички? Вы о чем? Люди дошли до ООП, до наследования, они априори не новички, а как минимум уже хорошо должны понимать язык. Да конечно, если пройти базу типа списков, строк, if, for, и сразу прыгнуть сюда это будет треш. Ну и по честному первый курс Сергея он слишком поверхностен и короток, после него сразу в ООП идти бессмысленно. Нужно еще пару тройку курсов по основам пройти и на степике они есть. Хотя задачи по сложности самые трудные в курсах Сергея. ООП данный курс просто бомба!
здорово! пока что лучшее объяснение механизма наследования среди всех что я читал)
уроки ООП Python просто супер
Сергей, спасибо огромное. Продолжаем грызть гранит науки. По этому ролику вроде все хорошо зашло. Да и вообще стал проходить не по одному уроку, а по два в день. Так как уже лучше все усваивается) Еще раз спасибо вам!
Ну тут надо однозначно поставить лайк)
отличное объяснение темы, все разложено и очень легко воспринимается!
опа,наследование,уже 20 урок, спасибо огромное, все понял❤
Большое спасибо! Ваш курс по ООП одно из лучших на степике, что есть по пайтону. Хотя есть и известные конкуренты. Но и вы и они не взаимоисключение, а дополнение. Спасибо!
Шикарно, спасибо!
Сначала даже не хотел смотреть первый урок раздела "Наследования". Думал, что ничего нового не услышу. Но нюансы настолько интересно освещены, что не пожалел ни об одной просмотренной минуте))
Спасибо за эти прекрасные уроки
Спасибо большое, сэкономил полтора часа
Очередное спасибо вам! для зрителей канала, открою лайфХак как вызывать в методах базового класса поля и метолы классов наследников не опасаясь что программа сломается, делать проверку if isinstance(self, (Line, Rect)): self.draw().
ну это шутка конечно)
спасибо
лайк и и комментарий в поддержку канала.
Отлично изложено. Автору поклон за труды! Еще бы задачи закрепляющие и куда-нибудь на степик курс - получился бы лучший курс по ООП на русском языке за который можно и денег отдать.
Благодарю за урок.
Спасибо. Все понятно.
Кстати, такой нюанс: в примере, где self.draw() находиться в родительском классеbe (время 8:53), у меня выдает ошибку:
"TypeError: Line.draw() missing 1 required positionalument: 'self'"
И чтобы сработало так, как на видео, мне приходится прямо указывать аргумент для self.draw(). Это не критично для учебы. Возможно, у меня просто более новая версия python
P.s. Я прекрасно понял посыл автора, что нельзя в родительском классе делать вызов атрибута из дочернего класса. Но это не отменяет того, что для учебы стоит повторить весь код урока самостоятельно.
Спасибо, хорошо объяснено!
спасибо за урок
Спасибо!
Спасибо за очередной урок! Кружочек со стрелочкой вниз напротив класса Geom похоже означает, что класс Geom наследуется другими классами. Странно, для переопределяемых в потомках методов среда в базовом классе показывает стрелочку вниз напротив метода, а для переменных (переопределяемых в потомках) почему-то нет.
Стрелочки показываются только для переопределяемых атрибутов класса. Внутри экземпляров переопределений нет.
@@selfedu_rus Я имел в виду, что стрелочки показываются не для всех переопределяемых атрибутов класса, а только для методов.
👍👍
А разве у нас не создаются экземпляры L, R и G когда мы вызываем функцию set_cord?
set_coords() создает локальные атрибуты x1, y1, x2, y2 внутри текущего объекта класса, больше ничего
1:20 Сергей, разве мы расширяем класс Geom классом Line? Мне кажется, что наоборот, мы расширяем класс Line классом Geom, ведь именно в Line появляются новые методы и свойства из Geom'а, а не наоборот
Ну а как можно расширить класс (Line), которого еще нет? ))
@@selfedu_rus хорошо, пойдём от обратного, чем расширился класс Geom? Свойства и методы дочерних классов ему недоступны, а у дочерних напротив, функционал шире, за счёт унаследованных методов и своих собственных.
@@user-cm1ri1sn2u я понимаю так, что есть исходный базовый класс Geom, мы хотим получить более широкий функционал, поэтому на его базе создаем дочерний с дополнительными новыми атрибутами
Вы забыли рассказать про синтаксис написания __init__() в дочерних классах, если часть аргументов принимается через __init__() родительского.
Почему я разбухтелся? Потому, что в задачках к теме Вы об этом аспекте не забыли)))
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
Внимание спойлер! Смотрите о Diamond Problem и МRО в следующем занятии.
неработает
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()