OOP Python class inheritance | Python OOP in three lessons
In the lesson, we will look at class inheritance in python, simple inheritance, super inheritance, multiple inheritance and linearization in python. We will also touch on the topics of polymorphism and composition.
00:00 Introduction to class inheritance in python
02:07 class inheritance
20:50 inheritance super
23:15 multiple inheritance
23:46 linearization
-------------------------------------------------- -------------------------------------------------- ----------------------------------------------
Become a channel sponsor and you will get access to exclusive bonuses.
More:
/ @pythonhubstudio
-------------------------------------------------- -------------------------------------------------- ----------------------------------------------
OOP course with the practice of writing a program:
• Полный курс уроков обу...
Telegram bot development course using an example project:
• Playlist
Subscribe to the channel! Ask questions in the comments!
#PythonHubStudio
#python
Пікірлер: 142
Вот это да, а я думал это я глупый и ничего понять не могу) оказывается другие объяснения были не понятными) Вся картина в голове как паззл складывается) Автор гений!
Оставляю комментарий лишь бы ютуб поднял эти уроки повыше в выдаче, потому что идеально. Ведро лайков этому человеку! 👍
Первый урок был хорош и второй не глядя лайк ставлю! Очень понятно все объясняете, спасибо
@user-vl1ps8uw1o
2 жыл бұрын
Да, я по тому-же принципу лайк поставил)
Урок просто отличный! Спасибо за простое объяснение ТЕМ БОЛЕЕ с примерами!!
гений. Лучшее объяснение, которое я видел. К черту хауди Хо и подобных
@luden6794
2 жыл бұрын
А кто такой хауди Хо?
Благодарю всей душой, очень понятно и доходчиво. С первого раза всё зашло, хотя обычно приходится по несколько раз просматривать ролики других авторов, чтобы понять суть. После первого же просмотра подписка, лайк, и колокольчик все уведомления. Ты лучший!!! Продолжай своё дело, ты делаешь этот мир лучше.
Да, понятные примеры и логичное понятное объяснение. Спасибо!
Братан от души. Очень годный контент. Единственный понятный урок на ютюбе.
Хочу выразить благодарность!!! Отличное видео! Всё понятно становится
Спасибо что объясняете сложные вещи простым языком👍
Очень полезное видео про ООП. Спасибо автору
Спасибо за труд! Прекрасный материал, продолжайте в том же духе, успехов вам во всём.
Просто глобальный респект вам за вашу нелегкую работу.
Все лаконично и невероятно понятно. Спасибо за такое подробное объяснение. На других каналах многое непонятно
Большое спасибо, отличное объяснение.
Огромное спасибо за такое подробное объяснение!
Спасибо огромное за видео! Все по полочкам разложили!
Нет Человека который способен объяснять лучше вас
Шикарные уроки! Спасибо!
большое спасибо за четкое и разборчивое объяснение
Отличная подача материала, автору спасибо!
Спасибо! Хороший, понятный урок.
отличное объяснение! я думал мое понимание питона закончилось до просмотра этого видео, спасибо!
блин брат лучшее объяснение классов че и как, я только начал в это вникать и из 5 видео что я посмотрел твое лучшее!!
Добрый день. Спасибо за отличный курс!
Какой Вы все таки крутой чувак! Смотрю не из РФ с рекламой 👌 Спасибо огромное!!!
Благодарю вас за информацию, объясняете очень хорошо, даже я понял
Наконец то понял по ООП))лучший, спасибо)
прохожу курс на юдеми ФОФАнова, чтобы закрыть лекцию и перейти к следующей теме я уже 4 раза пересмотрел ООП и понял почти ничего! В этих 3-ёх уроках 1 раз и смог выполнить домашку фофанова. Пайтон Хаб Студия - респект тебе!!!!! просто супер. пиши курс и заливай на патреон и юдеми, если еще этого не сделал - БУдет успех. Если рассматривать тебя, как класс, то метод подачи твоих объектов на высоте!!)) спасибо!!!
@PythonHubStudio
2 жыл бұрын
Класс!! Спасибо, очень приятно!
Одно из самых адекватных и понятных объяснений конструкций пайтона. Спасибо.
Спасибо! Доступно и понятно.
Отличное объяснение ООП ! Автор респект
Просто суперское объяснение материала, спасибо большое за видео. (like + subscription)
Спасибо! Отличное видео
Поддрерижаваю! Очень крутое объяснение! Спасибо!
красавчик , все очень понятно и доступно.
Спасибо, месяцев 5 назад практиковал питон, написал парсер, но классы юзать не приходилось. Вернулся - и очень хорошее объяснение темы. спс
Лучшее, что видел!
Ну Вы- Человечище! Спасибо!
@PythonHubStudio
Жыл бұрын
Рад, что видео Вам помогло!
да ты реально нереально крут
все очень круто и понятно, спасибо
спасибо автору за хорошее объяснение
Спасибо!
Доступно распедалено, спасибо!
@PythonHubStudio
2 жыл бұрын
😁
Спасибо Вам Большое .
спасибо за видео!
Крутотошка! Спасибо
Благодарю за урок
Отличный урок! Великолепный талант автора доносить до слушателя материал. И без навязчивой музыки. Один недостаток - всё скомкано в один файл. Тут же показано наследование и тут же полиморфизм.
@tobesunset820
2 жыл бұрын
Полностью согласен, тем более на интересном примере)
Спасибо очень хороший урок
не могу понять последний пример, чтобы было написано 'А', мы наследуемся почему-то от 'B', но в 'B' же есть метод 'a', как он переходит на класс 'A', или если по другой логике, мы наследуемся от B там он метода не видит, а переходит сразу на 'А' , почему не на 'C'? Этот вопрос был ниже и я им тоже задался во время просмотра
Буттон)) Но урок очень топовый, спасибо! Прям наглядненько так и без лишнего
Ты просто бомба!
Ахриненно
Просто лучший
@PythonHubStudio
3 жыл бұрын
Спасибо)
не могу понять последний пример, чтобы было написано 'А', мы наследуемся почему-то от 'B', но в 'B' же есть метод 'a', как он переходит на класс 'A', или если по другой логике, мы наследуемся от B там он метода не видит, а переходит сразу на 'А' , почему не на 'C'?
@Igor-ut6do
2 жыл бұрын
super.(B, self), значит что мы ищем все что выше класса B не включая его)
@bublick346
Жыл бұрын
Это было не очевидно
@showrun4747
5 ай бұрын
Получается не важно что В суперкласс а не подкласс от А, а просто играет роль порядок в котором они записаны в файле.. поди догадайся
пушка!
Great !!!
супер!!!! теперь могое понятно по Джанге
@Python Hub Studio, возраст не записывался в файл. Надо дописать в save класса родителя? Или можно добавить в дочерний не дублируя остальную часть кода метода save родителя?
@PythonHubStudio
3 жыл бұрын
Неделю спустя.... Класс родитель не трогаем, в этом-то и смысл, мы наследуемся если есть возможность не писать лишнее и не трогать старое. Если нужно записывать ещё и возраст, то метод save родителя не подойдёт там в open чётко прописано что записывать в файл, нужно полностью переписывать код в методе save дочернего класса переопределяя его полностью, но в данном примере он приватный(это нужно учесть)
спасибо!
Харош
оп) лайкосик и пятихаточка)))
почему то "users" не создался....
👍👍
С тобой научиться - проще простого. Только странно что так мало просмотров.
@PythonHubStudio
3 жыл бұрын
Спасибо)
🔥👍👍👍
чётко
Спасибо х2!!!
Ссылка на ПОЛНЫЙ курс ООП из ТРЕХ видео: kzread.info/head/PLNi5HdK6QEmX9fxp3_IBFx1O5tiTmKlYm И созданием профессиональной программы в ООП стиле: kzread.info/head/PLNi5HdK6QEmUIkR63RLqkECTCUwThQtcN
@maximkuzmin4103
2 жыл бұрын
ответьте, пожалуйста, на вопрос, копирую чужой комментарий: не могу понять последний пример, чтобы было написано 'А', мы наследуемся почему-то от 'B', но в 'B' же есть метод 'a', как он переходит на класс 'A', или если по другой логике, мы наследуемся от B там он метода не видит, а переходит сразу на 'А' , почему не на 'C'?
@iliaplotnikov2167
2 жыл бұрын
@@maximkuzmin4103 Дружище, мы не наследуемся от В. Глянь еще раз момент со строкой __mro__ - там мы получали порядок наследования, по какой очередности Python будет искать метод 'a' в наследовании. Написал же super(B, self) мы как бы просим у Python в списке __mro__ искать этот метод в СЛЕДУЮЩЕМ за 'B' классе - в данном случае это класс 'А'
@maximkuzmin4103
2 жыл бұрын
@@iliaplotnikov2167 спасибо большое за пояснение! пересмотрел момент сегодня и осознал
@user-jd5uz5xr9u
Жыл бұрын
Про выбор класса исполняемой команды в суппере. То есть оно там принцып лесенки? В зависимости от последовательности записаных классов? Если вначале напишем класс Z а потом ниже K и L то если я хочу класс Z то пишу в К а если L то класс который еще ниже?
спасибо за урок) не совсем по теме, но... не совсем понял по поводу __lenPassword() ... он правильно будет отрабатывать?) просто он записал в самом конце, и проверяет уже len(self.password)... тоесть получается он проверяет уже присвоенное значение экземпляра? или если в этой проверке сработает ошибка - то весь код в __init__ отменится и экземпляр не создастся? спрашиваю без всякого негатива, просто не понимаю)
@PythonHubStudio
Жыл бұрын
Я не очень помню код, чтоб ответить конкретно, всё-таки видео выпущено не вчера ...) Но главное: данный пример это всего лишь небольшой логический пример, чтоб можно было максимально понятно объяснить классы. Настоящая проверка, выглядит похоже, но все же по другому. Поэтому не заморачивайтесь.
По всей видимости на kzread.info/dash/bejne/qGyrx82RgsLVfdo.html оговорились, вы имели в виду Python 3 версии, в нем реализован метод в ширину, а в Python 2 - метод поиска в глубину.
@rizef2166
7 ай бұрын
Так поиск в ширину это когда в очереди первые на проверку связи первого уровня, в данном случае это C и A, в глубину судя из того что мы видим это когда сначала какая - то из связей ближайших берется, тут которая написана первой в наследование, а потом сразу от нее узел проверяется, а потом уже когда и этот узел был проверен, то идет следующая ближайшая к самой главной. Так что все правильно сказано
День добрый! Есть вопрос именно по классу Verification: почему, если из метода __init__ убрать self.__lenPassword(), то метод __lenPassword благополучно пропускает пароль меньше чем 8 символов и метод save записывает данные. Причем не важно, даже если убрать приватность. Т.е я обязательно должен ставить в __init__ self.password?
@woolgosh
2 жыл бұрын
Если из метода __init__ вы убираете self._lenPassword(), то вы убираете и проверку длины пароля. Соответственно при создании экземпляра класса, пароль не проходит проверку на длину, и экземпляр в любом случае будет создан.
@genylivnev7822
2 жыл бұрын
@@woolgosh Понял. Спасибо!
капец, все понятно.
когда ты raise делаешь, выполнение программы останавливается? допустим если телеграм бот крутится на сервере, и райзится исключение - бот же продолжит работать или он сдохнет? а event loop поможет избежать остановки работы бота? или ты на момент разработки пользуешься райзами, а потом в продакшене заменяешь всё try/эксептами? аааа не понятно
@PythonHubStudio
2 жыл бұрын
Поможет, сдесь нужно понимать, что все зависит от того !что вы пишете!, бота, как самостоятельную единицу или модуль с кодом для использования в более глобальном проекте
👍👍👍👍👍👍👍👍👍👍👍👍
👍
Почему, если я убираю из класса C наследие от класса B, то если пишу в "D" строку: "B.a(self)", код класса B всё равно отрабатывает. Хотя на него не ссылается ни D, ни C? Пример кода: class B: def a(self): print('B') class C: def a(self): print('C') class D(C, A): def a(self): B.a(self)
@antonpython8059
Жыл бұрын
Вы просто напрямую обращаетесь к методу в классе B передавая некий обьект в качестве аргумента, притом все это происходит из одного модуля. Это можно делать всегда и отовсюду, если к методу не применена инкапсуляция.
сравнение кортежа будет ли работать корректно если имя пользователя будет не совпадать а пароль совпадать :?
@PythonHubStudio
2 жыл бұрын
Проверьте, это пример всего лишь. На практике всё сложнее
Здравствуйте у меня вопрос я когда вызываю метод D.a() то мне в "а" просят передать аргументы, как это можно исправить, спасибо!
@PythonHubStudio
2 ай бұрын
В методе не должно быть параметров кроме (self)
автор подскажите, когда вы запускаете код, с новым параметром возраст, то возраст не записывается у вас в текстовый файл, в чем ошибка я не могу понять.
@showrun4747
5 ай бұрын
Оно и не должно записываться вроде
когда Django на канале?
Здравствуйте, на 3:48 у меня не создался нигде файл со значениями, хотя ошибки нигде не вывело
@PythonHubStudio
7 ай бұрын
Он где-то создался, а конкретно в той папке, которая указана в терминале при выполнении кода. Обратите на это внимание
@storm9479
7 ай бұрын
@@PythonHubStudio блин почему ответы удаляются
@storm9479
7 ай бұрын
@@PythonHubStudio Здравствуйте, спасибо за ответ, но проблему я уже решил (она была в том что run запускал файл main. py а не class. py и class2. py где я и писал код, я изменил конфигурацию run и всё заработало)Но раз вы мне тут ответили то у меня есть еще вопросик по видео где вы делали тг бота на aiogram , эта библиотека у меня не устанавливается, вывело что ошибка не в пип а в том что нужно установить Microsoft Visual C++ 14.0 или более позднюю версию, и что я это сделаю если установлю Microsoft Build Tools, далее ссылка на установку буилд тулс, а установил версию 17.0 но у меня по прежнему выводит ту же ошибку я уже перепробовал все способы которые мне советовали в Stack Offerlow , ничего не помогает, вы случайно не знаете в чем может быть дело? Заранее спасибо за помощь.
А что это за приложение, на котором вы работаете на этом видео?
@black_grizzly
5 ай бұрын
Ide , vs code
так в чём смысл писать свой класс обёртку над Tk?
Может я что то не так делаю, но как сделать так чтобы необязательные параметры со значением по умолчанию попадали из родительского в наследованный. class Human: def __init__(self,name='Noname',age=18): self.name=name self.age=age def call(self): print(f'My name is {self.name}. Im {self.age}') class Man(Human): def __init__(self,name='Noname',age=18,salary=10000): super().__init__(name,age) self.salary=salary def call(self): super().call() print(f'My salary is {self.salary}') man=Man() man.call() # Мне бы хотелось чтобы при при создании обьекта класс Man без параметров, брались значения по умолчанию из Human, чтобы не писать их как сейчас это сделано
@PythonHubStudio
2 жыл бұрын
class A: def __init__(self, name='alex'): self.name = name def show(self): print(self.name) class B(A): def __init__(self,surname='Un'): super().__init__() self.surname = surname def show(self): super().show() print(self.surname) B().show() Уберите из строки c super параметры
Все круто, но нужно было пример сделать не буквенным, было бы понятнее.
@PythonHubStudio
2 жыл бұрын
Согласен, пример надуманный, но позволил не отвлекать на сложность написания кода, а сконцентрироваться на теме
Импортировать класс, над которым будем издеваться разнообразным образом :ROFL
+
Разве можно переопределять методы класса родителя? Это противоречит SOLID-принципам, а именно принципу подстановки Лисков, где класс наследник должен легко заменять родителя, без потери функционала. У наследника должны быть те же функции, что и у родителя, и выполнять они должны одни и те же действия.
@PythonHubStudio
2 жыл бұрын
Урок о том что такое наследование,а не о высокопарном...
@RK-cc9rt
2 жыл бұрын
@@PythonHubStudio та не, это не предъява, скорее вопрос, ответ на который я сам пытаюсь найти
@RK-cc9rt
2 жыл бұрын
@@PythonHubStudio Я просто читал про SOLID-принципы и пытаюсь в них разобраться, потому что недавно общался с программистом с 10ти летним стажем и он говорит, что эти принципы очень часто не нужны, ведь не будешь на каждую новую фичу создавать отдельный класс от родителя, вот я и ищу, где бы мне понять рамки принципа открытости/закрытости и подстановки Лисков
@PythonHubStudio
2 жыл бұрын
Это скорее необходимость когда она уместна. Например: Написал какую-то библиотеку, выкинул её в мир и стрегешь капусту. Потом сделал новую версию, но так чтоб старые коды на ней работали, вот в принципе и все
@black_grizzly
5 ай бұрын
Я не знаю принципов solid и не трогал их даже, но мне показалось странным переопределение классов в дочернем классе. Понимаю, что это пример, конечно же. Но интересно есть ли прикладная часть у такого способа.
"этот класс, наследует метод инит, этого класса" что вообще происходит в этом видео??
что нельзя было назвать метод "а" по другому для объяснении?
@showrun4747
5 ай бұрын
Судя по обсуждению это непонятно только вам..
Здравия! Плейлист python для начинающих: - " Плейлист не существует. "
@PythonHubStudio
6 ай бұрын
Спасибо, завтра поправлю. Там было видео "python за 7 часов", и парсинг для практики. Эти видео на канале есть, забыл поменять в описании этого видео ссылки. Парсинг в правильной последовательности в плейлисте парсинга, а видео 7 часов отдельно.
открой телеграмм канал пожалуйста. иногда естт вопросы по коду а сам найти решение и ошибку найти не могу. было бы круто. извини за наглость . ты и так много делаешь для нас
@PythonHubStudio
2 жыл бұрын
Все вопросы в комментах, если не пропущуj(по техническим причинам и если вопрос четко поставлен), будет ответ.
Каждое следующее видео все меньше и меньше просмотров. Видимо не дотягивают люди. Семичасовой курс - 850к просмотров, а ООП и телеграме уже намного меньше, особенно последние видео.
Я ради прикола добавил проверку на заглавную букву в имени пользователя. Вот код,если кому интересно. def __init__(self, login, password): self.__firstletter() def __firstletter(self): if self.login[0].isupper(): return True else: raise ValueError('Укажите заглавную букву')
Кому лень писать код файла class3.py class A: class B: class C(B): class D(C, A): class Verificatoin: def __init__(self, login, password): self.login = login self.password = password self.__lenPassword() def __lenPassword(self): if len(self.password) raise ValueError ('Слабый пароль') def save(self): with open('users', 'a') as r: r.write(f'{self.login, self.password}' + ' ')
@PythonHubStudio
2 жыл бұрын
У многих будет ошибка из-за копи-паста в idle, но круть!
@user-kb4je7ii2q
2 жыл бұрын
Спасибо)
Спасибо!