@@ВалентинСакменов Да, много всего изучал) Решил, что дальше буду в веб-разработку учиться, поэтому начал смотреть Django framework. Пытался потихоньку изучать, но уперся в то, что я ничего не знаю про базы данных, про работу запросов и их методов... не знаю язык sql, не знаю java script и html от слова совсем. Не знаю css (хоть это уже вообще пока не критично). Соответственно, я изучал перечисленные технологии и языки. Помимо этого немного изучил PostgreSQL БД. И немного Redis. Вот сейчас читаю книгу - называется Django 4 в примерах (автор - Антонио Меле). Разместил резюме, но пока не дотягиваю даже до современных джуновских минимумов. Как-то так) А с классами и их методами давно разобрался. Я просто до изучения пайтон вообще ничего не знал про программирование. И тяжко очень разбираться с нуля, если еще учитывать, что мне уже 35 лет и я всю жизнь работал в продажах)
8:20 Не устанавливайте в качестве значения параметра по умолчанию список, словарь или множество! Если, конечно, не хотите, чтобы получилась путаница ,мешанина и непонятные ошибки. Число, строку, кортеж, None, True или False можно, они неизменяемые (immutable). А если значение по умолчания какого-то параметра задается изменяемым типом, то фактические параметры при разных вызовах функции окажутся связанными друг с другом и будут друг на друга влиять. Обычно, это не то, что нужно. Поэтому, если хотите параметр по-умолчанию [ ], то в заголовке надо его "закодировать" (например, как None), а в начале функции "раскодировать": def fun(L=None): if L is None: L = [ ] ...дальнейшая работа с L Если L будут только списки, то можно "раскодировать" так: L = L or [ ]
В отличие от предыдущих уроков, этот получился достаточно запутанный. Новичкам будет сложно разобраться, так что есть смысл осветить эту тему подробнее.
это ооп, ее более подробно не осветить. Достаточно сложная тема, которая многие годы может не усвоится в голове, пока не будешь практиковаться сам и экспериментировать
Честно говоря маловато для таких сложных тем как ООП, предыдущие 2 урока лично я так и не понял, как использовать (учусь с нуля по твоим курсам). Очень хочется больше примеров в уроке про модули, менеджер whith ... as, и сам ООП
Я бы сделал так: 1) Максимально всё объяснять, даже если урок будет под пол часа. Чем больше поняли тем лучше будет в будущем. 2) Больше примеров всех "сортов". 3) Больше дополнительной информации к примеру: не делать цикл чтобы узнать Мин./Макс. значение в списке, а рассказать о min()/max() и т. д. *4) Лично я бы оставлял простенькую задачу в конце видео, а в начале следующего разобрать решение (всё это нужно для общего понятия темы)
Блинский. Все буквально на коленке можно теперь клепать) Я до этого только через функциональщину все писал - автоматизировал рабочие рутинные процессы. А когда речь зашла об универсальных интерфейсах для всех рабочих станций - понятно стало, что наверное это должен быть веб интерфейс. Ну и встал вопрос - как? Кроме питона (в утилитарном смысле - совсем простые вещи) и зачатков джавы чистой - я ничего не знаю. Соответственно встал вопрос о том, что на слуху. Там собсна джанго сразу всплыл. Гуглеж тут же подсказал, что работать можно только через формат ООП, а то как я это делаю - будет неудобно. И я пошел искать что-то энтеринг левела. Ваши уроки шикарны)
@@creator7822 потому, что метод get написан один раз, использовать его можно сколько угодно. А если написать в инит, то получится два блока одинакового кода. Когда функции достаточно объемны - это важно
если кому то всё ещё непонятно, то по факту конструктор __init__ придаёт нужные вам параметры в класс, и по желанию так-же переопределяет любые методы которые вы хотите, и всё это намного упрощает и сокращает код, вместо того чтобы писать по несколько переменных и строк, для того чтобы всего лишь вывести значение
Чтобы питон был понятен посмотрите уроки на более сложные языки, на пример С# или Java. Я сам с Java и мне все абсолютно понятно! Ведь на джаве очень строгая типизация и все разжёвывается компайлеру что сам все понимаешь сразу.
кто лучше разбирается подскажите, мне кажется или автор тут запутал, сделал абракодабру, рассказывает про __init__ и тем не менее оставил set_data . Зачем тогда нужен __init__ не понятно
Я вот немного не понял на 5.27 минуте... Когда мы добавили def set_data(self, name = None, age = None, isHappy = None и вводим cat1.set_data( "John", 2). Эти значения никуда не выводятся. И я не понял для чего и как с этим работать. Когда мы вписали это в _init_, то там уже понятно
Переопределение методов происходит в подклассе при наследовании. Вы показываете установку значений по умолчанию для параметров функции. Хороший курс, но местами путаница в определениях.
Забавно, учитель упорно нарушает стандарты PEP8 в самых принципиальных местах. Дефолтные параметры при назначении пробелами от равенства не отедляются.
Функция __init__ - это инициализация. Но хотя это тоже является хоть каким, но никаким конструктором. Но правильнее будет называть функцию __init__ инициализацией
не до конца понятна тема с переопределением. Если по этому примеру заполнять базу с котами где у кота есть только возраст или настроение но не известно его имя, как быть в таком случае, чтобы автоматически прописывалось занчение - None? вот к примеру cat1 = cat("Барсик",5, True) - это правильное написание кода, но допустим мы не знаем имени кота, то как тогда прописать остальные значения правильно, чтобы пропустить имя кота и не выходили ошибки если прописать код так: cat1 = cat( ,5, True) - выдает ошибки если так: cat1 = cat(5, True) - имя устанавливается как - 5, а возраст как - True. понятно, что если прописать каждое значение в отдельность через методы .name= , .age = , и .isHappy =, и что то оставить не заполненным то при вызове getData() будут отображаться все значения а вместо пропущенного None, но мы ведь хотим через конструктор все писать одной строчкой. Не понятно как правильно реализовать эту возможность в случае если какие нибудь данные не расположены они где-то в начале к в случае с именем . и второй момент: хотелось бы по подробнее узнать почему конструкция называться должна именно __init__, почему 2 нижних подчеркивания в начале и в конце названия. Спасибо за внимание!
Не знаю, актуально ли это еще или нет, но. При вызове конструктора можно явно указать, каким полям класса ты хочешь присвоить значения. Если при создании класса "Cat" мы прописывали поля так же, как в видео, а поле "name" хотим оставить по умолчанию, то вызов конструктора для cat1 будет выглядеть так: cat1 = Cat(age=5, IsHappy=True) В таком случае мы дадим знать интерпретатору, какие конкретно поля класса какими значениями мы хотим инициализировать. Тогда при вызове геттера для cat1 выведется name по умолчанию, age = 5, isHappy = True Вот так, надеюсь помогло
@@СемёнФилиппов-ф2ф респект, чувак, помогло. Правда, придётся теперь в объектах прописывать полностью все названия параметров через равно, но всё же, спасибо.
Не помогло, остальные заменились на те, что указаны по-умолчанию. А хотелось, чтобы если переопределяится значения уже ранее введенных парамметров, то меняются только те, которые указаны.
по идее переопределение методов это не то что показано в видео переопределение метода это когда мы создаем метод с таким же названием но другими входными параметрами, а то что в уроке это просто установка параметров по умолчанию и еще автор забыл сказать что такие параметры надо в конец ставить потому что если будут в середине или начале то ошибка выпадет
Добрый день! Смазался урок. Не понял, как количество переменных передаваемых в set_data можно использовать? Ну допустим передали 2 переменные или одну. Они будут записаны как последовательные парамметры в методе. Кстаати! Использование None работает только в конструкторе. У меня так по крайней мере. Урок требует дополнительного ковыряния и изучение ошибок( на 3-ку. Но... может это и хорошо. Т.к. к 18 уроку уже есть понимание где искать ошибки) Спасибо! А так все отлично!
Вопрос. если у нас все 3 переменные имеют по умолчанию -значение None то если я ввожу 2 значения(х,у) то первая переменная будет х, вторая переменная будет у, третья будет None как вызвать метод, чтоб первая была -х вторая переменная - None. а третья - y. т.е. как пропустить передачу одного или нескольких параметров, чтоб они были по умолчанию думал так: Cat1.set_data('koli', , True) - но выдает ошибку
Не знаю чи ще актуально. Ви можете звертатися до аргументу за його ім'ям, ось приклад: class Table: length = None width = None def __init__(self, length = 10, width = 20): self.length = length self.width = width print('Table\'s length: ', self.length, 'Table\'s width: ', self.width, 'Table\'s square: ', self.length * self.width) table1 = Table(width=10) Вихід: Table's length: 10 Table's width: 10 Table's square: 100 Я задав лише другий аргумент звернувшись до нього за ім'ям і мені не довелося вводити перший аргумент.
переменной в функции указывай значение по умолчанию. Именно переменной в параметре. Тогда функция не будет ее запрашивать и ее можно пропустить пустой строкой
6:25 дружище, с конструктором внутри класса приведенное переопределение не работает. Если конструктор закомментировать, а с объектом работать через cat1.set_data("John", 2), тогда работает. Тот ли модуль ты исполняешь, раз на протяжении всего урока ничего не меняется? Бро, это не предъява, я пытаюсь разобраться. Вот у себя изменил код. как описал выше, все заработало. В точности с твоим кодом - не работает. И сразу ответ, разобравшись: переопределение нужно указывать в конструкторе, а не в методе. Спасибо!
Не могу понять смысл переопределения метода? Смысл переопределять если на экран выводятся те же 3 параметра(барсик,3,True)?вот мы прописали ниже (John ,2, False), а выводится на экран все равно барсик. Или это опечатка автора, что то недоделано, или я не могу понять зачем переопределять метод. Я так понял - у нас было - барсик,3, True, и потом мы переопределяем на John,2 и соответсвенно должно поменять барсик на John, 3 на 2, а True остаться? Типа поменяли всего два параметра а третий остался как был. Так ведь? В этом смысл?
если, спустя 9 месяцев, ещё не разобрался, то я могу попытаться объяснить.. " Смысл переопределять если на экране выводятся те де 3 параметра (барсик,3,True)?вот мы прописали ниже (John,2,False), а выводится на экран все равно барсик " - Чисто технически, значения поменялись на "John" и "2", но он это просто не вывел. если ты сам попробуешь сделать это, а после вывести на экран: print(cat1.name()), допустим, то тебе выведется именно John. А до этого, функция вывода была сразу же заложена в конструкторе __init__ . а, т.к код выполняется по порядку, то сначала 1. выполнилось все, что было связано с __init__, а потом: 2. Мы изменили значения на (на 20 строке): name = "John" age = 2 isHappy = None None, у isHappy, потому что это считается значением по умолчанию - def set_data(self, name, age, **isHappy = None** обрати внимание на то, что я выделил звёздочками. Именно в этом фрагменте автор указал, что будет считаться за "значение по умолчанию"
я совсем зеленый в этом деле. только третий день. Я не понял одного. вот если мы не ставим последний параметр к коту, то отображается None. а вот если допустим не ввести имя, то следующие параметры слетают. Т.е. возраст улетает на имя, настроение улетает на возраст, а настроение остается None. Знающие, подскажите как исправить. буду благодарен
Не знаю, актуально ли это еще или нет, но. При вызове конструктора можно явно указать, каким полям класса ты хочешь присвоить значения. Если при создании класса "Cat" мы прописывали поля так же, как в видео, а поле "name" хотим оставить по умолчанию, то вызов конструктора для cat1 будет выглядеть так: cat1 = Cat(age=5, IsHappy=True) В таком случае мы дадим знать интерпретатору, какие конкретно поля класса какими значениями мы хотим инициализировать. Тогда при вызове геттера для cat1 выведется name по умолчанию, age = 5, isHappy = True Вот так, надеюсь помогло
Я сделала всё точь в точь Ютубе, но у меня не выводится ничего, обсолютно пусто, и не написана где ошибка, если хоть кто-то знает скажите почему такое происходит?
Получилось? Я делаю этот урок на 8 дней позже, чем Вы. У меня то же самое. Все на 1000 рах перепроверила - вывод пусто и не указано никакой ошибки. Зашла в комменты посмотреть, вдруг уже у кого-то так же.
PyCharm подчеркивает isHappy в __init__, просит сделать в нижнем регистре. Кстати, вместо __init__, благодаря подсказчику набрал __int__, минут 10 тупил в чём ошибка
Толи пример не удачный. Толи это очередная реинкорнация выборки/сортировки данных. Как я понял . Есть два котика. У каждого по три параметра. Эти параметры прописаны для каждого котика персонально. Тоесть, как не вертись, некие данные надо вводить. Потом куча манипуляций. И на выходе распечатка параметров этих котиков. По идеи, это в 4 строчки можно запихать. Две с котиками. Две с принтами. Увеличиваем количество котиков, также увеличивается количество писанины. Как по мне, тут рациональное приделать цикл, который будет считывать данные о котиках и распечатывать.
Вот тот код, что на 4.40 ничего не выводит в консоль. Попробовал в конец добавить print(cat1.name) и вернулось значение None, то есть сам конструктор не сработал. Может кто подскажет, что не так?
Подскажите кто-нибудь пожалуйста! Сделал также как на 4:41 но в строке с функцией def set_data вылазит ошибка из-за отступов, что делать не очень понимаю
не спішіть все розуміти, я переглянула всі ці уроки ще 8 місяців тому і довго практикувалась і тільки зараз дойшла до ООП і коли ти вже достатньо засвоїв попередні теми на практиці то це вже не буде даватись так складно..
Скопировал данные с прошлого урока - не работает , вручную все переписал - не работает . Attribute error 'Cat object has no attributes 'set' . Потом оказалось что часть кода свернуто , что то полкчилось , в итоге проверка следующей опции - опять ошибка . Этот урок явно плох
@@_Diadoc честно , эти уроки мало эффективны, просмотрел их , потом купил курс по пайтону и даже базовые задачки с курса данная информация решить не позволяет даже в первых темах, а тут огромные темы в 1 видео засунули . Максимум для ознакомления что есть что в пайтон
извените, но этот урок плох оказался в отличие от прежних, поясняю - он завязан на предыдущем уроке , а если прошло какое то время, то уже непонятно о чем речь, а соединить оба урока тяжко , длинный по времени урок сложно воспринимаеться, прошу разделить эти урока полностью.
смотри прошлый и обновляй знания... это тебе надо, понять, а не кому то.. или ты думал, посмотришь 5 минут урока и будет программистом... наивный.... Пройдут многие годы, пока ты напишешь хоть что то стоящее, и то,е сли будешь каждый день практиковаться и обучаться постоянно, смотреть уроки подобные по нескольку раз, и на разных ресурсах
вообще ничего не понятно. Автор, если перед тем как изучать данную тему надо что то знать,тогда напиши что именно, твои видосы никто не понимает на самом деле.
Очень слабая подача материала. Подойдет разве что школьникам для быстрого входа. Очень много ошибок. Непонимание фундаментальных понятий. Примеры не показательны. Нисколько не раскрывают суть. Код плохой. На таких видео обучают плохих программистов. Их уже развелось до чёрта. Список - это изменяемый тип данных! Пустые списки передавать в функции вообще нельзя ! Долго потом будете отлавливать ошибки, не понимая почему ваш код работает не как ожидалось. Можно долго изливать свое негодование. Короче СПЕЦИАЛИСТОВ с таким образованием нигде не примут!
@@kolazee напр канал Хитрый питон И подобные можно самому найти. Суть в том что люди имеют серьёзный фундамент и глобальное понимание темы. Такой код хочется Конспектировать и пересматривать повторно. Также в топку курсы от мэйлру, скилбокс и отус. А ведь кто-то за это ещё и деньги отдаёт. У меня Есть много платных курсов за которые хотят много $. Могу закинуть на файлообменник за символические пару сотен ₽ за потраченное время.
Открываю тайну, спишите код до момента вывески подписки, именно в этот момент Георгий закрывает части кода-сокращает. На 1:42 наглядно видно, как он открывает его чтобы скопировать и вставить в ИНИТ. Все работает корректно, ОСТАЛОСЬ только понять КАК. Что сложно. Ну хоть срисовать получилось🤪
Потому что автор не понимает вообще концепцию ООП, то что он сделал, это просто установил дефолтные значения в методах, никакого переопределения метода там не было. Человек ничего не понимает и при этом ещё кого-то учит, боже.
4:45 не переопределение методов, а установка значений по умолчанию. Переопределение методов происходит, когда класс переопределяет(изменяет логику) методы родительского класса
Смысл такой же как и в функциях, мы просто делаем шаблон куска кода для дальнейшего использования многократно, это делает код компактнее и читабельнее. Это как я понял.
Когда я добавил значения по умолчанию в функцию set_data А после создал объект: Cat5=Cat(GGWP,4) Cat5.set_data() То у меня выдает ошибку Хотя вроде программа должна была сама дописать за меня недостающие значения Я не понимаю почему?Код проверил все в порядке,но выходит ошибка,еще не понял почему у него пропал кот Джон когда он тестировал значения по умолчанию у значения isHappy
Скорее всего, ты уже разобрался с этим. Но всё же отвечу, он сначала создал объект с помощью конструктора (с помощью него же и вывел) и только после этого он объекту cat1 присвоил другие значения ('John', 2) с помощью метода set_data, при этом он не выводил обновленный cat1 (так как метод set_data не умеет выводить)
Если вводить только возраст и значение True, то выводит: "имя: 2 Возраст: True Счастлив: None". Как сделать чтоб нормально работал и понимал, что нет данных именно об имени?
Вот до этого урока все было понятно)
аналогичный случай и в нашей деревне. перестал догонять...
Прочитав ваш комментарий перед уроком немного испугался, но слава Богу все понял)
вот и я также). Расскажи, научился ещё чему-нибудь после этих уроков? Может дашь пару советов, что учить дальше?
@@ВалентинСакменов Да, много всего изучал) Решил, что дальше буду в веб-разработку учиться, поэтому начал смотреть Django framework. Пытался потихоньку изучать, но уперся в то, что я ничего не знаю про базы данных, про работу запросов и их методов... не знаю язык sql, не знаю java script и html от слова совсем. Не знаю css (хоть это уже вообще пока не критично). Соответственно, я изучал перечисленные технологии и языки. Помимо этого немного изучил PostgreSQL БД. И немного Redis. Вот сейчас читаю книгу - называется Django 4 в примерах (автор - Антонио Меле). Разместил резюме, но пока не дотягиваю даже до современных джуновских минимумов. Как-то так) А с классами и их методами давно разобрался. Я просто до изучения пайтон вообще ничего не знал про программирование. И тяжко очень разбираться с нуля, если еще учитывать, что мне уже 35 лет и я всю жизнь работал в продажах)
@@The_Magnifico объясни мне, плиз, на кой прописывать переопределение метода cat1.set_data("John" , 2) если на выводе у тебя ничего не меняется?
После второго просмотра все стало предельно ясно, хотя сомневаюсь что смогу сам написать подобное без образца, буду пробовать. Спасибо!
8:20 Не устанавливайте в качестве значения параметра по умолчанию список, словарь или множество! Если, конечно, не хотите, чтобы получилась путаница ,мешанина и непонятные ошибки. Число, строку, кортеж, None, True или False можно, они неизменяемые (immutable). А если значение по умолчания какого-то параметра задается изменяемым типом, то фактические параметры при разных вызовах функции окажутся связанными друг с другом и будут друг на друга влиять. Обычно, это не то, что нужно. Поэтому, если хотите параметр по-умолчанию [ ], то в заголовке надо его "закодировать" (например, как None), а в начале функции "раскодировать":
def fun(L=None):
if L is None: L = [ ]
...дальнейшая работа с L
Если L будут только списки, то можно "раскодировать" так:
L = L or [ ]
А разве кортеж изменяемый ?
А ,только увидел, что вы его не там упомянули , извините
В отличие от предыдущих уроков, этот получился достаточно запутанный.
Новичкам будет сложно разобраться, так что есть смысл осветить эту тему подробнее.
это ооп, ее более подробно не осветить. Достаточно сложная тема, которая многие годы может не усвоится в голове, пока не будешь практиковаться сам и экспериментировать
вообще запутанно. ничего не понятно.
@@ShooterStarооп, повод бросить программирование
Я то понял что делают конструкторы, только вопрос нафига они нужны? Я просто не могу представить ситуацию где они понадобились бы
@@ShooterStarвообще то можно . Гоша просто не подкован в теме
Очень хорошо объясняешь и у тебя очень приятный голос, прям приятно слушать, в общем спасибо !
Ща упростим:
Добавляем ещё одну функцию, а две другие также оставляем, просто скрываем их__))))))
Упростили с кайфом!
Смотрите давайте будем честны это лучший курс по программированию который мы видели
Честно говоря маловато для таких сложных тем как ООП, предыдущие 2 урока лично я так и не понял, как использовать (учусь с нуля по твоим курсам). Очень хочется больше примеров в уроке про модули, менеджер whith ... as, и сам ООП
Я бы сделал так:
1) Максимально всё объяснять, даже если урок будет под пол часа. Чем больше поняли тем лучше будет в будущем.
2) Больше примеров всех "сортов".
3) Больше дополнительной информации к примеру: не делать цикл чтобы узнать Мин./Макс. значение в списке, а рассказать о min()/max() и т. д.
*4) Лично я бы оставлял простенькую задачу в конце видео, а в начале следующего разобрать решение (всё это нужно для общего понятия темы)
@@---69 ну тогда делай (каждый может говорить, а сами то три минутное видео еле снимаете 🤦♂)
@@jokerblat9064 он просто выложил свою идею, зачем такой негатив
Блинский. Все буквально на коленке можно теперь клепать) Я до этого только через функциональщину все писал - автоматизировал рабочие рутинные процессы. А когда речь зашла об универсальных интерфейсах для всех рабочих станций - понятно стало, что наверное это должен быть веб интерфейс. Ну и встал вопрос - как? Кроме питона (в утилитарном смысле - совсем простые вещи) и зачатков джавы чистой - я ничего не знаю. Соответственно встал вопрос о том, что на слуху. Там собсна джанго сразу всплыл. Гуглеж тут же подсказал, что работать можно только через формат ООП, а то как я это делаю - будет неудобно. И я пошел искать что-то энтеринг левела. Ваши уроки шикарны)
В принципе понятно. Но нужно будет смотреть еще какой-то другой курс
Все просто и понятно, супер! Жду продолжения!
Спасибо за работу 👍
Спасибо за доходчивое объяснение ооп. Вроде все просто
Может кто-то обьяснить зачем мы создавали еще один метод для вывода данных, если мы это могли запихнуть в __init__?
Это просто для разнообразия, на чье усмотрение. Я тоже не понял прикола усложнять но для кого как удобнее
@@creator7822 потому, что метод get написан один раз, использовать его можно сколько угодно. А если написать в инит, то получится два блока одинакового кода. Когда функции достаточно объемны - это важно
если кому то всё ещё непонятно, то по факту конструктор __init__ придаёт нужные вам параметры в класс, и по желанию так-же переопределяет любые методы которые вы хотите, и всё это намного упрощает и сокращает код, вместо того чтобы писать по несколько переменных и строк, для того чтобы всего лишь вывести значение
На заметку тем кто не понял этот урок : ищите другой курс по ООП
выочень хорошо обесняте
поздравляю вас друзья, мы на финишной прямой!
Thank you so much🙏🏻
Чтобы питон был понятен посмотрите уроки на более сложные языки, на пример С# или Java. Я сам с Java и мне все абсолютно понятно! Ведь на джаве очень строгая типизация и все разжёвывается компайлеру что сам все понимаешь сразу.
кто лучше разбирается подскажите, мне кажется или автор тут запутал, сделал абракодабру, рассказывает про __init__ и тем не менее оставил set_data . Зачем тогда нужен __init__ не понятно
Я вот немного не понял на 5.27 минуте... Когда мы добавили def set_data(self, name = None, age = None, isHappy = None
и вводим cat1.set_data( "John", 2). Эти значения никуда не выводятся. И я не понял для чего и как с этим работать. Когда мы вписали это в _init_, то там уже понятно
чтобы сократить код в конце
@@rosskh5437 мб он ошибся , я в init добавил none и все заработало как надо
@@rosskh5437 set_data он ввёл уже после того как cat1 присвоил значения с помощью конструктора. А set_data не умеет выводить значения
6:22 код не реализовался
4:13 мы не упростили на 4 строчки кода, а наоборот, посчитайте сколько строк в функции __init__ (5). а убрали в самом конце только 4
set_data почему то не определяется в VSCode и __init__/
что за 3 точки? откуда они взялиссь у вас в конце строчек?
Переопределение методов происходит в подклассе при наследовании. Вы показываете установку значений по умолчанию для параметров функции. Хороший курс, но местами путаница в определениях.
Забавно, учитель упорно нарушает стандарты PEP8 в самых принципиальных местах. Дефолтные параметры при назначении пробелами от равенства не отедляются.
Почему у меня точь в точь код (4:30) не выводит ничего, процесс заканчивается с кодом 0, а значений нет😢
Я буду тут каждый день. День 10.1
Функция __init__ - это инициализация. Но хотя это тоже является хоть каким, но никаким конструктором. Но правильнее будет называть функцию __init__ инициализацией
не до конца понятна тема с переопределением. Если по этому примеру заполнять базу с котами где у кота есть только возраст или настроение но не известно его имя, как быть в таком случае, чтобы автоматически прописывалось занчение - None?
вот к примеру
cat1 = cat("Барсик",5, True) - это правильное написание кода, но допустим мы не знаем имени кота, то как тогда прописать остальные значения правильно, чтобы пропустить имя кота и не выходили ошибки
если прописать код так:
cat1 = cat( ,5, True) - выдает ошибки
если так:
cat1 = cat(5, True) - имя устанавливается как - 5, а возраст как - True.
понятно, что если прописать каждое значение в отдельность через методы .name= , .age = , и .isHappy =, и что то оставить не заполненным то при вызове getData() будут отображаться все значения а вместо пропущенного None, но мы ведь хотим через конструктор все писать одной строчкой. Не понятно как правильно реализовать эту возможность в случае если какие нибудь данные не расположены они где-то в начале к в случае с именем .
и второй момент: хотелось бы по подробнее узнать почему конструкция называться должна именно __init__, почему 2 нижних подчеркивания в начале и в конце названия. Спасибо за внимание!
уже нашёл ответы?
Не знаю, актуально ли это еще или нет, но. При вызове конструктора можно явно указать, каким полям класса ты хочешь присвоить значения. Если при создании класса "Cat" мы прописывали поля так же, как в видео, а поле "name" хотим оставить по умолчанию, то вызов конструктора для cat1 будет выглядеть так:
cat1 = Cat(age=5, IsHappy=True)
В таком случае мы дадим знать интерпретатору, какие конкретно поля класса какими значениями мы хотим инициализировать. Тогда при вызове геттера для cat1 выведется name по умолчанию, age = 5, isHappy = True
Вот так, надеюсь помогло
@@СемёнФилиппов-ф2ф респект, чувак, помогло. Правда, придётся теперь в объектах прописывать полностью все названия параметров через равно, но всё же, спасибо.
@@СемёнФилиппов-ф2фЖаль в уроке это нет. Это важно для применения.
Не помогло, остальные заменились на те, что указаны по-умолчанию. А хотелось, чтобы если переопределяится значения уже ранее введенных парамметров, то меняются только те, которые указаны.
Я написал идентичный код, но он не запускается и выдаёт ошибки. Вообще не могу разобраться
Выделите весь текст и займитесь cntr + alt +L, если не помогло проверьте правильность написания слов, запятых, символов верхнем и нижнем регистре
НЕ понял сегодняшьюю тему(
у меня почему то после конструктора стал выводить Process finished with exit code 0
аналогично , получилось как-то решить проблему ?
по идее переопределение методов это не то что показано в видео
переопределение метода это когда мы создаем метод с таким же названием но другими входными параметрами, а то что в уроке это просто установка параметров по умолчанию и еще автор забыл сказать что такие параметры надо в конец ставить потому что если будут в середине или начале то ошибка выпадет
Увы что то не так, часть материала скрыта и поэтому выскакивает ошибка, придется скипать этот урок
Добрый день! Смазался урок. Не понял, как количество переменных передаваемых в set_data можно использовать? Ну допустим передали 2 переменные или одну. Они будут записаны как последовательные парамметры в методе. Кстаати! Использование None работает только в конструкторе. У меня так по крайней мере.
Урок требует дополнительного ковыряния и изучение ошибок( на 3-ку. Но... может это и хорошо. Т.к. к 18 уроку уже есть понимание где искать ошибки)
Спасибо! А так все отлично!
на 5:10 коту1 присвоено имя Джон, а выводится Жопен ((
Вопрос.
если у нас все 3 переменные имеют по умолчанию -значение None
то если я ввожу 2 значения(х,у) то первая переменная будет х, вторая переменная будет у, третья будет None
как вызвать метод, чтоб первая была -х вторая переменная - None. а третья - y.
т.е. как пропустить передачу одного или нескольких параметров, чтоб они были по умолчанию
думал так: Cat1.set_data('koli', , True) - но выдает ошибку
Не знаю чи ще актуально. Ви можете звертатися до аргументу за його ім'ям, ось приклад:
class Table:
length = None
width = None
def __init__(self, length = 10, width = 20):
self.length = length
self.width = width
print('Table\'s length: ', self.length, 'Table\'s width: ', self.width, 'Table\'s square: ', self.length * self.width)
table1 = Table(width=10)
Вихід:
Table's length: 10 Table's width: 10 Table's square: 100
Я задав лише другий аргумент звернувшись до нього за ім'ям і мені не довелося вводити перший аргумент.
переменной в функции указывай значение по умолчанию. Именно переменной в параметре. Тогда функция не будет ее запрашивать и ее можно пропустить пустой строкой
@@maksymbabich1383 дякую)
Кто-нибудь понял, для чего прописывали "John" и прочее в cat1.set_data, если на выходе ничего не изменилость?
изменилось, просто вывод информации был до вызова метода set_data, если после set_data выполнить метод get_data, то значения будут уже изменённые
@@VitaliyZlobin + получается что функция при переопределении одного параметра затирает все данные объекта
2:53 для себя
6:25 дружище, с конструктором внутри класса приведенное переопределение не работает. Если конструктор закомментировать, а с объектом работать через cat1.set_data("John", 2), тогда работает. Тот ли модуль ты исполняешь, раз на протяжении всего урока ничего не меняется? Бро, это не предъява, я пытаюсь разобраться. Вот у себя изменил код. как описал выше, все заработало. В точности с твоим кодом - не работает. И сразу ответ, разобравшись: переопределение нужно указывать в конструкторе, а не в методе. Спасибо!
Подскажите пожалуйста, как правильно прописать алгоритм чтобы значения изменялись, мне бы наглядный пример
AttributeError: 'Cat' object has no attribute 'set_data'
мб, ты сделал опечатку в название метода, когда писал его в самом классе?
Здесь нет перегрузки конструктора как в C#?
Не могу понять смысл переопределения метода? Смысл переопределять если на экран выводятся те же 3 параметра(барсик,3,True)?вот мы прописали ниже (John ,2, False), а выводится на экран все равно барсик. Или это опечатка автора, что то недоделано, или я не могу понять зачем переопределять метод. Я так понял - у нас было - барсик,3, True, и потом мы переопределяем на John,2 и соответсвенно должно поменять барсик на John, 3 на 2, а True остаться? Типа поменяли всего два параметра а третий остался как был. Так ведь? В этом смысл?
если, спустя 9 месяцев, ещё не разобрался, то я могу попытаться объяснить..
" Смысл переопределять если на экране выводятся те де 3 параметра (барсик,3,True)?вот мы прописали ниже (John,2,False), а выводится на экран все равно барсик "
- Чисто технически, значения поменялись на "John" и "2", но он это просто не вывел. если ты сам попробуешь сделать это, а после вывести на экран: print(cat1.name()), допустим, то тебе выведется именно John.
А до этого, функция вывода была сразу же заложена в конструкторе __init__ . а, т.к код выполняется по порядку, то сначала
1. выполнилось все, что было связано с __init__,
а потом:
2. Мы изменили значения на (на 20 строке):
name = "John"
age = 2
isHappy = None
None, у isHappy, потому что это считается значением по умолчанию - def set_data(self, name, age, **isHappy = None**
обрати внимание на то, что я выделил звёздочками. Именно в этом фрагменте автор указал, что будет считаться за "значение по умолчанию"
я совсем зеленый в этом деле. только третий день. Я не понял одного. вот если мы не ставим последний параметр к коту, то отображается None. а вот если допустим не ввести имя, то следующие параметры слетают. Т.е. возраст улетает на имя, настроение улетает на возраст, а настроение остается None. Знающие, подскажите как исправить. буду благодарен
Не знаю, актуально ли это еще или нет, но. При вызове конструктора можно явно указать, каким полям класса ты хочешь присвоить значения. Если при создании класса "Cat" мы прописывали поля так же, как в видео, а поле "name" хотим оставить по умолчанию, то вызов конструктора для cat1 будет выглядеть так:
cat1 = Cat(age=5, IsHappy=True)
В таком случае мы дадим знать интерпретатору, какие конкретно поля класса какими значениями мы хотим инициализировать. Тогда при вызове геттера для cat1 выведется name по умолчанию, age = 5, isHappy = True
Вот так, надеюсь помогло
Я сделала всё точь в точь Ютубе, но у меня не выводится ничего, обсолютно пусто, и не написана где ошибка, если хоть кто-то знает скажите почему такое происходит?
Получилось? Я делаю этот урок на 8 дней позже, чем Вы. У меня то же самое. Все на 1000 рах перепроверила - вывод пусто и не указано никакой ошибки. Зашла в комменты посмотреть, вдруг уже у кого-то так же.
Який саме код виконуєте?
внимательно надо все делать
значит функции print() нет, которая находится в методе get_data()
@@elysiumstation где именно print находиться? на видео нету его, у меня так же пустой результат
Не нужное set_data когда есть __init__ запутал множество ребят
Если вам не понятно -- не отчаивайтесь, автору тоже ничего не понятно)
Что же, финишная прямая
PyCharm подчеркивает isHappy в __init__, просит сделать в нижнем регистре.
Кстати, вместо __init__, благодаря подсказчику набрал __int__, минут 10 тупил в чём ошибка
Толи пример не удачный.
Толи это очередная реинкорнация выборки/сортировки данных.
Как я понял .
Есть два котика.
У каждого по три параметра.
Эти параметры прописаны для каждого котика персонально.
Тоесть, как не вертись, некие данные надо вводить.
Потом куча манипуляций.
И на выходе распечатка параметров этих котиков.
По идеи, это в 4 строчки можно запихать.
Две с котиками.
Две с принтами.
Увеличиваем количество котиков, также увеличивается количество писанины.
Как по мне, тут рациональное приделать цикл, который будет считывать данные о котиках и распечатывать.
Всем привет у кого такая же проблема как и у меня я делаю всё как в видео но у меня в терминале ничего нету не результата ни ошибок что делать?(
Почему у меня self просто серый и attributeerror?
Все в порядке, дело в отступах
Вот тот код, что на 4.40 ничего не выводит в консоль. Попробовал в конец добавить print(cat1.name) и вернулось значение None, то есть сам конструктор не сработал. Может кто подскажет, что не так?
у меня така же хрень
@@ourrussia1437 я решил проблему. Оказалось, что автор скрыл/свернул некоторые строки, а я этого не заметил, присмотритесь.)
@@valdorazor ну да, там три точки я в начале их просто поставил так же ...
я по следующему уроку понял что это скрытые строки
Так и не понял, зачем нужен этот конструктор...
У меня вообще код не работает 🧐
Подскажите кто-нибудь пожалуйста!
Сделал также как на 4:41 но в строке с функцией def set_data вылазит ошибка из-за отступов, что делать не очень понимаю
чел ты разобрался если да подскажи что не так у меня такая же проблема
@@sansgamer3060 Смог разобраться? Я тоже сейчас на такой проблеме.
такая же залупа, но не просто на строчке с set data а вообще +- на 14 строчке всегда просит ставить отступ, хотя он там нахуй не нужен
а результат не выводит
не спішіть все розуміти, я переглянула всі ці уроки ще 8 місяців тому і довго практикувалась і тільки зараз дойшла до ООП і коли ти вже достатньо засвоїв попередні теми на практиці то це вже не буде даватись так складно..
Скопировал данные с прошлого урока - не работает , вручную все переписал - не работает . Attribute error 'Cat object has no attributes 'set' . Потом оказалось что часть кода свернуто , что то полкчилось , в итоге проверка следующей опции - опять ошибка . Этот урок явно плох
Вылечила атрибутеррор правильными отступами
@@_Diadoc честно , эти уроки мало эффективны, просмотрел их , потом купил курс по пайтону и даже базовые задачки с курса данная информация решить не позволяет даже в первых темах, а тут огромные темы в 1 видео засунули . Максимум для ознакомления что есть что в пайтон
@@poprop10 наверно потому что надо закреплять каждый урок из этого плейлиста практикой а не за один день все просматривать?
ничего не выводится
5:18 У тебя не изменились значения)
цель - не показать другие значения, а удостовериться в том, что ошибка исчезнет.
извените, но этот урок плох оказался в отличие от прежних, поясняю - он завязан на предыдущем уроке , а если прошло какое то время, то уже непонятно о чем речь, а соединить оба урока тяжко , длинный по времени урок сложно воспринимаеться, прошу разделить эти урока полностью.
смотри прошлый и обновляй знания... это тебе надо, понять, а не кому то.. или ты думал, посмотришь 5 минут урока и будет программистом... наивный.... Пройдут многие годы, пока ты напишешь хоть что то стоящее, и то,е сли будешь каждый день практиковаться и обучаться постоянно, смотреть уроки подобные по нескольку раз, и на разных ресурсах
@@ShooterStar если ты знаешь, сколько нужно изучать питон, зачем ты сидишь на этом уроке? Повторяешь?)))
ИзвЕните ))
вообще ничего не понятно. Автор, если перед тем как изучать данную тему надо что то знать,тогда напиши что именно, твои видосы никто не понимает на самом деле.
Очень слабая подача материала. Подойдет разве что школьникам для быстрого входа.
Очень много ошибок. Непонимание фундаментальных понятий.
Примеры не показательны. Нисколько не раскрывают суть. Код плохой. На таких видео обучают плохих программистов.
Их уже развелось до чёрта.
Список - это изменяемый тип данных! Пустые списки передавать в функции вообще нельзя !
Долго потом будете отлавливать ошибки, не понимая почему ваш код работает не как ожидалось.
Можно долго изливать свое негодование.
Короче СПЕЦИАЛИСТОВ с таким образованием нигде не примут!
а кого можешь посоветовать?
@@kolazee напр канал
Хитрый питон
И подобные можно самому найти. Суть в том что люди имеют серьёзный фундамент и глобальное понимание темы.
Такой код хочется Конспектировать и пересматривать повторно.
Также в топку курсы от мэйлру, скилбокс и отус. А ведь кто-то за это ещё и деньги отдаёт.
У меня Есть много платных курсов за которые хотят много $. Могу закинуть на файлообменник за символические пару сотен ₽ за потраченное время.
@@axlmal6980 скилбокс бесплатен шоли?
Единственное понятное объяснение
Как приятно подкреплять полученные от Вас знания сразу на практике! Банально переписать код из урока самостоятельно - так лучше запоминается.
Открываю тайну, спишите код до момента вывески подписки, именно в этот момент Георгий закрывает части кода-сокращает. На 1:42 наглядно видно, как он открывает его чтобы скопировать и вставить в ИНИТ. Все работает корректно, ОСТАЛОСЬ только понять КАК. Что сложно. Ну хоть срисовать получилось🤪
Ни кто не заметил что переопределение не сработало? Там вышло то что и было до этого
Тоже не сработало, как править?
@@ВиталийРальников-н4з хз
это какая секунда?
Потому что автор не понимает вообще концепцию ООП, то что он сделал, это просто установил дефолтные значения в методах, никакого переопределения метода там не было. Человек ничего не понимает и при этом ещё кого-то учит, боже.
@@sogorich есть годные уроки по python?
спасибо за контент 👍🏻, очень жду продолжения (как минимум 40-50 уроков про питон)
Яндекс переводчик видео вам в помощь. Хотя для меня объяснение классов тут более разжовано и понятно. Автору👍
Этот урок меня окончательно запутал. Постоянно выдает ошибки, пытаясь вводить аналогичное авторскому
что-то превратильсь в 3 точки каким путем?в начале ролика кусочек кода
4:45 не переопределение методов, а установка значений по умолчанию.
Переопределение методов происходит, когда класс переопределяет(изменяет логику) методы родительского класса
Все понятно, когда буду отрабатывать на практике - вернусь к этому уроку. Спасибо!
Очень понравилось, толково объясняешь , спасибо
А почему перегрузка называется переопределением?
Если честно, совсем не понятно для чего это ООП предназначено. 3 раз пересматриваю не могу вникнуть.
Смысл такой же как и в функциях, мы просто делаем шаблон куска кода для дальнейшего использования многократно, это делает код компактнее и читабельнее. Это как я понял.
Спасибо как только будет время надо поучиться
Когда я добавил значения по умолчанию в функцию set_data
А после создал объект:
Cat5=Cat(GGWP,4)
Cat5.set_data()
То у меня выдает ошибку
Хотя вроде программа должна была сама дописать за меня недостающие значения
Я не понимаю почему?Код проверил все в порядке,но выходит ошибка,еще не понял почему у него пропал кот Джон когда он тестировал значения по умолчанию у значения isHappy
Скорее всего, ты уже разобрался с этим. Но всё же отвечу, он сначала создал объект с помощью конструктора (с помощью него же и вывел) и только после этого он объекту cat1 присвоил другие значения ('John', 2) с помощью метода set_data, при этом он не выводил обновленный cat1 (так как метод set_data не умеет выводить)
пожалуйста не скрывайте код )
вроде все понятно, однако код абсолютно нерабочий
Если вводить только возраст и значение True, то выводит: "имя: 2 Возраст: True Счастлив: None". Как сделать чтоб нормально работал и понимал, что нет данных именно об имени?
попробуйте ввести так: "name: ' ', age: 2, isHappy: True" . У меня сработало, но перед значением возраста будет пробел
и превращение чего-то в 3 точки спрятал за рекламой
три точки это же свёрнутая функция
А что такое Добиж? Он же там Говорит это слово
тобишь скорее всего это тоже самое что -
то есть