Пример идеального объяснения материала! Гений преподавания! Спасибо огромное за этот труд, "разжевали", осталось только "в рот положить...". Побольше таких материалов и можно не переживать за обучение будущих поколений. Буду рекомендовать ваш видео курс, еще раз спасибо за титанический труд!
Лучшего учителя по Python я больше не встречал, хотя долго искал, понял что книги важней чем видео, но здесь что то изумительно дословно и понятно объясняется.
Спасибо огромное! Когда-то именно из-за ООП забросил изучать программирование и собственно свой первый ЯП, тогда уж не мог нормально понять значение self, читал книгу по питону, на гитхабе читал разъяснения, но вот как пару месяцев назад снова влился в это всё, то ваш канал поставил мне определенную планку, из-за которой я каждый день или через день импруфаюсь
Спасибо за Ваши уроки! Всё очень подробно и доходчиво. В этом уроке с ходу не понял, почему сработал финализатор. Нагуглил следующее: Счётчик ссылок для объекта становится нулевым, когда работа программы завершается. Может, пригодится кому-то.
Занимаюсь разработкой уже года 3, но ООП для меня всегда был какой то противной темой))) Вы первый человек, который смог доходчиво донести материал, спасибо огромное!
Ахах минут 15 сидел не понимал почему не работает и уже лез в инет оказывается вместо __init__ написал __int__ будьте внимательно друзья если некоторые вещи пишет IDE
К примеру написана утилита, которая в режиме реального времени выдает количество коннектов к БД экземплярами определенного класса. Сам класс подсчитывает их средствами счетчика - интового атрибута уровня класса. То есть когда инстанс класса создается: атриубут уровня класса инкрементируется на 1. Тут как раз нужен del, так как при дропе экзмепляра будет вызван данный дандер метод, где нужно будет декрементировать атриубут уровня класса на 1. Разуеется можно юзать не простой счечик, а более сложную структуру по типу словаря, куда заносить доп данные: какой адрес БД, под каким юзером и т.д.
БД - база данных Инкрементирование - операция увеличения переменной (оператор инкрементирования += ) Дандер, он же магический метод, он же метод с двумя нижними подчеркиваниями - Dunder Это по терминам, а по абстракции тоже не понял 😂 это уровень к которому нужно стремиться наверное на данном этапе )
@@user-mp4yx7ss8b спасибо за такую структуру - inc/dec, хотя пришлось несколько раз перематывать в начало, замедлять воспроизведение, но кажись понял. ))
Спасибо за уроки такого уровня, большая часть такого контента доступна только на английском, этот канал стоит особняком в русскоязычном ютубе, столь грамотной подачи не найти даже на английском, правда это является и минусом - нельзя поддержать автора либо приобрести его курс на степике, к сожалению. Ещё раз спасибо)
Привет Сергей. Учусь по твоим видеоурокам, мне нравятся твои уроки, ты молодец, респект! ) Но, всё же я где то, что то не догоняю, а именно: Вот я создал 2 простые конструкции, одну магическую, другую нет class Hello_1: a,b,c = 10,20,30 def __init__( self ): print( f'Hi: { self.a }, { self.b }, { self.c }' ) print( a,b,c ) Hello_1() def Hello_2(): a,b,c = 1000,2000,3000 def iinit(): print( f'Hi-Hi: { a }, { b }, { c }' ) iinit() print( a,b,c ) Hello_2() Они обе выполняют одно и то же, делают это одинаково, выдают один и тот же результат, но я ни как не могу понять если они делают одно и тоже, а вторая проще, зачем нужна первая?? )) Я провел эксперименты, городил в обеих кучи заборов, но и та и другая дают одно и тоже! )) Что я не понял из твоих уроков? )) Спасибо заранее за твой ответ. )
Пожалуй, это самый важный урок по ооп. Спасибо автору. Хотелось бы простенького примера графического приложения с виджетами. Непонятно, почему к виджету нужна приставка self?
Одного меня терзают мысли как получилось что функция get__coords увилела методы self.x и self.y которые находятся внутри другой функции? Мы же такого не проходили в областе видимости
Если у кого-то по каким-то причинам удаление объекта не проходит и нет надписи об удалении объекта: в конце кода вызовите >>> del имя_объекта (del object_X) ПРИМЕР для маленьких: del pt И class Point выдаст фразу об удалении объекта из метода # Удаление экземпляра def __del__(self): print('Удаление экземпляра:' + str(self))
Спасибо за видео. У меня странный вопрос: Как я могу практиковать ООП, если в Джанго грубо говоря я использую всё готовое ? Плюс, где вообще место паттернам в веб- программировании?)
6:22 В чем все таки различие между фактическими и формальными параметрами. Из вашего базового курса (урок #38): "Можно задавать параметры со значениями по умолчанию . Такие параметры называются формальными, а обычные - фактическими. В чем отличие формальных параметров от фактических, помимо значений по умолчанию? Их не обязательно прописывать при вызове функции." В интернете (разные источники): "Формальные параметры - это переменные или значения, которые объявляются в определении функции, метода или другого объекта. Они определяют, какие аргументы могут быть переданы в функцию или метод. Фактические параметры - это значения, которые передаются в функцию или метод при вызове. " Получается (исходя из интернета), что все параметры объявленные в определении функции - формальные. Они могут быть и со значением по умолчанию и без. И короче помогите я запутался
@@light8032 с чем-то не согласен? - аргументированно обоснуй. Иначе подобный комментарий выглядит как банальный пердеж в муку. Но ты, чёрт возьми, прав, это я лох, в очередной раз повелся на вольную интерпретацию Серёги. Он в своей лекции подменил понятия позиционных и именованных аргументов, на фактические и формальные. Что-то слишком часто у него стало проскальзывать "свое видение" некоторых понятий. В теме по регэкспу тоже лютую дичь городил. Надо быть осторожнее и коммент на всякий случай снес, чтобы не вводил людей в заблуждение, ибо там была копипаста Серёгиной лапши.
Добрый день! Прекрасные уроки. Подскажите пожалуйста, на протяжении лекции было 2 не задействованные функции из пред. урока (set и get coords). Без них всё работает. Вы их просто не убрали или они для чего то здесь нужны?
Я вначале показываю, как можно через эти методы формировать и записывать данные в локальные атрибуты объекта класса. Потом показываю, что это лучше делать через инициализатор. Ну а методы, да, остались, ими можно пользоваться, если нужно изменить соответствующие значения.
В последнем примере был удалён объект класса Point, но ссылка pt на него была прописана в файле, и перед самим удалением были даже выведены значения объекта. Почему так? После отработки программы удаляются все объекты, которые она инициализировала? ТО-есть, получается, что в момент запуска программы, она создаёт объекты в памяти, которые мы прописали в файле, проделывает заданную программу, а потом всё стирает, чтобы освободить память?
Не до конца понял вопроса. У нас есть объект pt класса Point, внутри класса определен финализатор del. Когда сборщик мусора освобождает память, занимаемую объектом, вызывается финализатор. До тех пор объект существует в памяти. Ну и когда программа завершается, то конечно, все выделенные ресурсы освобождаются.
@@selfedu_rus Аа, понятно, а подскажите ещё, пожалуйста. Я изучаю django и в нём есть предустановленные модели. Так вот, когда мы создаём собственную модель для базы данных, где хранятся ссылки на экземпляры этих классов или они сами? И в какой момент они создаются? В момент добавления записей на сайте? Просто, ранее, в Python, мы привязывали экземпляр к переменной, и там было всё понятно, а здесь никаких явных привязок не видно.
@@ResellerRus чтобы это понять вам лучше посмотреть занятие по метаклассам (я там этот вопрос затрагиваю), ну а ссылки внутри самого фреймворка, он всем там управляет ))
При реализации в классе магического метода __del__ и инициализации объекта класса нулем, данный метод не вызывается, однако он вызывается при явном удалении объекта с помощью del.
Сергей, почему когда мы пишем метод def __del__(self): print('чего-то там, мол удалено') мы его не переопределяем? Ведь он, по идее, теперь должен только писать, что удалил что-то, но не удалять в действительности. А если он не переопределяется, то почему такое не работает с __new__?
метод del() действительно не удаляет объект, он вызывается, когда сборщик мусора собирается его удалить (то есть, непосредственно перед удалением объекта), но когда это произойдет - неизвестно. Метод new() также можно переопределять без проблем и вызывается он непосредственно перед созданием самого объекта. Причем, для создания нужно вызвать аналогичный метод из базового класса object.
Добрый день! Вопрос по удалению. Я создал обьект PT. Далее отработало удаление. Но по факту если я обращусь из юпитера к этому обьекту - то он никуда не девался. Не до конца понятно, он удаляет из памяти, но где же тогда сохраняется обьект?
странно, но почему-то в пайчарме __del__ работает отлично, удаляет действительно после того, как объект стал не нужен и именно тот объект с той же ссылкой, что и был создан. а если записать тот же пример в юпитер ноутбуке, то там всегда удаляет сразу после вызова __init__ какой-то левый объект c другим адресом.
Пробовал разобраться, если актуально, то вот к чему пришёл сам: jupyter сохраняет объект до следующего запуска текущей ячейки, либо иной ячейки, где будет создан новый объект pt. Т.е. jupyter считает, что объект pt ещё тебе может пригодиться. И в памяти будет существовать старый объект pt до момента его пересоздания в текущей или последующих ячейках. Также протестил: с закрытием .ipynb все объекты удаляются.
у меня вопрос когда создается объект класса, например test = Class() то как вывести такой принт - "Создается объект test то есть вывести имя переменной которая и будет объектом класса
@@selfedu_rus если написать в ините такое то будет выдан адрес. если переопределить метод __str__ то будет ошибка, как я понял какая то зацикленность получится. пробовал в юпитере - не получилось короче.
Спасибо большое. Если __del__ вызывается автоматически в случае отсутствия ссылок на объект без фактического написания данного метода в классе, то возникает вопрос, есть ли случаи когда следует прописывать эту функцию (метод) в классе?
Не понял... Что значит вызывается без фактического написания метода в классе ? Если метода в классе нет, то он и не вызывается... Метод __del__ не удаляет объект, он выполняет финальные операции перед удалением (если таковые требуются). Удаляет сборщик мусора. Ну если я сам всё правильно понял )
например, чтобы точно проверить, что соединение закрыто, с бд, сокетом и т.п. или например, что некий лок тоже был снят. В абстракции - гость уходит - проверить не забыл ли он шляпу или зонт.
Становиться понятно, когда нет Х, У и прочего. Нужно показывать суть в действии на примере окон, кнопок, действий. А так это просто баловство цифрами и буквами. Алгоритм для людей: Код = наглядный пример (приложение, окно с кнопкой, цвет, звук)
у меня вопрос почему сразу когда хочешь установить данные которые тебе надо почему сразу это не писать в методе типо так: class Point: color = 'red' circle = 2 def __init__(self): self.x = 8 self.y = 4
Объектов класса обычно больше 1, с таким подходом у всех будут одинаковые данные со старта. Если захочется другие координаты(пример), придется переопределять их каким то методом. Если у вас 1000 точек, то для каждой прописывать то, что можно сделать при создании объекта как минимум утомительно. Надеюсь стало понятнее
окей, но все равно не понятно почему применился метод дел. Ведь мы не переопределяли переменные. У нас есть экземпляр pt у него единственное значение - класс. Далее мы ничего не присваивали переменной pt
Я только пробую, просьба камнями не кидать. А в чем разница внутри класса между обычным "переменная = значение" и "def __init__: self.переменная = значение"? Пробовал- и так и так- всё "принтится" и изменяется как при обращении к классу так и к экземпляру класса.
между методами и функциями есть одно важное отличие: методы, как правило, связаны с тем или иным объектом класса и потом им первым параметром передается self; у обычных функций такого нет
Пример идеального объяснения материала! Гений преподавания! Спасибо огромное за этот труд, "разжевали", осталось только "в рот положить...". Побольше таких материалов и можно не переживать за обучение будущих поколений. Буду рекомендовать ваш видео курс, еще раз спасибо за титанический труд!
Лучшего учителя по Python я больше не встречал, хотя долго искал, понял что книги важней чем видео, но здесь что то изумительно дословно и понятно объясняется.
Сначала ставлю лайк, потом смотрю видео, как жаль, что я не нашёл ваш канал раньше!
Спасибо большое! Есть лишь одно пожелание
добавляйте домашнее задание, как Вы это делали в прошлом варианте курса по ООП
Теория без практики мертва)
самые внятные и толковые объяснения из всех, что я видел
Ни одного лишнего слова. Все структурированно и по делу. Талант !
Только благодаря этому видео мне стало понятно почему self.x = x))) Да и все остальные вопросы сразу прояснились. Спасибо большое!😀
Спасибо за такой маленький и такой длинный урок! Луч света в темном царстве основ ООП. )))
Спасибо, что не упускаете детали и акцентируете на них внимание. Достойный курс
Ура, я начинаю понимать ООП на питоне! Спасибо, Сергей!
У вас самые понятные объяснения по этой теме , спасибо
Разобрался только благодаря Вам, теперь в коде все ясно.
Просто те шо я шукав вся інформація шо мені нада ти самий лучиш!
Вы просто гений
У меня слов нету!
Все очень понятно и просто. Спасибо вам огромное!
твои видосы и объяснения просто шедевр
Сергей, спасибо за урок!
Спасибо огромное! Когда-то именно из-за ООП забросил изучать программирование и собственно свой первый ЯП, тогда уж не мог нормально понять значение self, читал книгу по питону, на гитхабе читал разъяснения, но вот как пару месяцев назад снова влился в это всё, то ваш канал поставил мне определенную планку, из-за которой я каждый день или через день импруфаюсь
Точно! self это что то, тоже была трудность в понимании, до этого и книжки читал и видосы других блогеров смотрел, но понял только здесь.
спасибо за ваш труд) одно удовольствие слушать
Спасибо за Ваши уроки! Всё очень подробно и доходчиво. В этом уроке с ходу не понял, почему сработал финализатор. Нагуглил следующее:
Счётчик ссылок для объекта становится нулевым, когда работа программы завершается.
Может, пригодится кому-то.
Занимаюсь разработкой уже года 3, но ООП для меня всегда был какой то противной темой))) Вы первый человек, который смог доходчиво донести материал, спасибо огромное!
Спасибо тебе! Так смачно всё разъяснить смог только ты почему-то
Благодарю за видео!
Великолепно) Спасибо большое!💛🙏
Ахах минут 15 сидел не понимал почему не работает и уже лез в инет оказывается вместо __init__ написал __int__ будьте внимательно друзья если некоторые вещи пишет IDE
Спасибо, я тоже ))))))))))
спасибо за ролик!
Хотелось бы увидеть примеры использования __del__, трудно представить зачем он может пригодится, вне чисто учебного материала.
К примеру написана утилита, которая в режиме реального времени выдает количество коннектов к БД экземплярами определенного класса. Сам класс подсчитывает их средствами счетчика - интового атрибута уровня класса.
То есть когда инстанс класса создается: атриубут уровня класса инкрементируется на 1. Тут как раз нужен del, так как при дропе экзмепляра будет вызван данный дандер метод, где нужно будет декрементировать атриубут уровня класса на 1.
Разуеется можно юзать не простой счечик, а более сложную структуру по типу словаря, куда заносить доп данные: какой адрес БД, под каким юзером и т.д.
@@user-mp4yx7ss8b что?
БД - база данных
Инкрементирование - операция увеличения переменной (оператор инкрементирования += )
Дандер, он же магический метод, он же метод с двумя нижними подчеркиваниями - Dunder
Это по терминам, а по абстракции тоже не понял 😂 это уровень к которому нужно стремиться наверное на данном этапе )
@@user-mp4yx7ss8b спасибо за такую структуру - inc/dec, хотя пришлось несколько раз перематывать в начало, замедлять воспроизведение, но кажись понял. ))
@@user-mp4yx7ss8b этот дендерный метод __del__ нужно прописывать явно в классе?
То, что Вы делаете - очень ценно!
Спасибо. Все понятно.
Спасибо вам большое 🤝
Огромное спасибо!
Спасибо большое за курс! Вам хорошо удаётся объяснение) 😁
Можно странный вопрос?
На каком языке вы ещё говорите?
amazing teacher, thanks!
Было бы здорово добавить задания для самоподготовки🙃
Спасибо огромное
Спасибо за уроки такого уровня, большая часть такого контента доступна только на английском, этот канал стоит особняком в русскоязычном ютубе, столь грамотной подачи не найти даже на английском, правда это является и минусом - нельзя поддержать автора либо приобрести его курс на степике, к сожалению. Ещё раз спасибо)
Думал ни когда в жизни не дастся мне ООП. Вроде нормально пока. Понятно все. Едим дальше.)))
добрый день,спасибо за доступное изложение,но,хотелось бы,как в курсе по Python,получить домашку)))
Еще раз Вам спасибо за курс)
Вот и чудненько!
Отлично Отлично!
Спасибо
Опаньки) а я ждал ;)
спасибо!👏
прекрасные уроки! если бы вы делали еще домашние задания к каждому уроку с ответами, я бы с удовольствием купила бы этот сборник !
Спасибо! Практические задания по ссылке на курс на Stepik!
Привет Сергей.
Учусь по твоим видеоурокам, мне нравятся твои уроки, ты молодец, респект! )
Но, всё же я где то, что то не догоняю, а именно:
Вот я создал 2 простые конструкции, одну магическую, другую нет
class Hello_1:
a,b,c = 10,20,30
def __init__( self ):
print( f'Hi: { self.a }, { self.b }, { self.c }' )
print( a,b,c )
Hello_1()
def Hello_2():
a,b,c = 1000,2000,3000
def iinit():
print( f'Hi-Hi: { a }, { b }, { c }' )
iinit()
print( a,b,c )
Hello_2()
Они обе выполняют одно и то же, делают это одинаково, выдают один и тот же результат, но я ни как не могу понять если они делают одно и тоже, а вторая проще, зачем нужна первая?? ))
Я провел эксперименты, городил в обеих кучи заборов, но и та и другая дают одно и тоже! ))
Что я не понял из твоих уроков? ))
Спасибо заранее за твой ответ. )
Посмотрите еще раз первый урок
Пожалуй, это самый важный урок по ооп. Спасибо автору. Хотелось бы простенького примера графического приложения с виджетами. Непонятно, почему к виджету нужна приставка self?
Можно еще явно указать имя аргумента, которому передается параметр: pt = Point(y=1)
👍👍
👍
👍👍👍👍👍
👍👍👍👍
А можно ли в методе __del__ сослаться на тот же класс в котором он создан,тем самым создать новый объект класса?
Одного меня терзают мысли как получилось что функция get__coords увилела методы self.x и self.y которые находятся внутри другой функции? Мы же такого не проходили в областе видимости
И снова топ оф зе топ)
Сергей , Здравствуйте, будет ли ролик про метапрограммирование?
Будет про метаклассы
Спасибо, все четко. Только вот из ранее изучаемого это были не "магические методы", а конструктор и деструктор и служебные функции :)
там неверно, это инициализатор и финализатор ))
Если у кого-то по каким-то причинам удаление объекта не проходит и нет надписи об удалении объекта:
в конце кода вызовите
>>> del имя_объекта (del object_X)
ПРИМЕР для маленьких:
del pt
И class Point выдаст фразу об удалении объекта из метода
# Удаление экземпляра
def __del__(self):
print('Удаление экземпляра:' + str(self))
Спасибо за видео. У меня странный вопрос: Как я могу практиковать ООП, если в Джанго грубо говоря я использую всё готовое ? Плюс, где вообще место паттернам в веб- программировании?)
В больших приложениях, там где уже готовые паттерны типа Django не подходят или приходится писать свои модули для особенных фич.
6:22 В чем все таки различие между фактическими и формальными параметрами.
Из вашего базового курса (урок #38):
"Можно задавать параметры со значениями по умолчанию . Такие параметры называются формальными, а обычные - фактическими. В чем отличие формальных параметров от фактических, помимо значений по умолчанию? Их не обязательно прописывать при вызове функции."
В интернете (разные источники):
"Формальные параметры - это переменные или значения, которые объявляются в определении функции, метода или другого объекта. Они определяют, какие аргументы могут быть переданы в функцию или метод. Фактические параметры - это значения, которые передаются в функцию или метод при вызове. "
Получается (исходя из интернета), что все параметры объявленные в определении функции - формальные. Они могут быть и со значением по умолчанию и без. И короче помогите я запутался
@@SayXaNowиди учись и потом пиши
@@light8032 с чем-то не согласен? - аргументированно обоснуй. Иначе подобный комментарий выглядит как банальный пердеж в муку. Но ты, чёрт возьми, прав, это я лох, в очередной раз повелся на вольную интерпретацию Серёги. Он в своей лекции подменил понятия позиционных и именованных аргументов, на фактические и формальные. Что-то слишком часто у него стало проскальзывать "свое видение" некоторых понятий. В теме по регэкспу тоже лютую дичь городил. Надо быть осторожнее и коммент на всякий случай снес, чтобы не вводил людей в заблуждение, ибо там была копипаста Серёгиной лапши.
Как я понимаю курс на степике жители других стран не могут приобрести?
Подскажите у вас есть видео про правило Видроу Хоффа?
нет, не делал
А почему в вашем случае произошло удаление объекта? Вы ведь не переопределяли переменную pt, которая ссылается на него?
программа завершилась и там уже все объекты автоматом удаляются
Вы в Москве преподаете?
Добрый день! Прекрасные уроки.
Подскажите пожалуйста, на протяжении лекции было 2 не задействованные функции из пред. урока (set и get coords). Без них всё работает. Вы их просто не убрали или они для чего то здесь нужны?
Я вначале показываю, как можно через эти методы формировать и записывать данные в локальные атрибуты объекта класса. Потом показываю, что это лучше делать через инициализатор. Ну а методы, да, остались, ими можно пользоваться, если нужно изменить соответствующие значения.
@@selfedu_rus Благодарю за разъяснение!
я люблю тебя
Доброго дня всем! Подскажите, пожалуйста, __del__ получается очищает память?
нет, очищает сборщик мусора и когда это произойдет никто не знает ))
а зачем оставили set_coords, если ___init___ делает то же самое?
В последнем примере был удалён объект класса Point, но ссылка pt на него была прописана в файле, и перед самим удалением были даже выведены значения объекта. Почему так? После отработки программы удаляются все объекты, которые она инициализировала?
ТО-есть, получается, что в момент запуска программы, она создаёт объекты в памяти, которые мы прописали в файле, проделывает заданную программу, а потом всё стирает, чтобы освободить память?
Не до конца понял вопроса. У нас есть объект pt класса Point, внутри класса определен финализатор del. Когда сборщик мусора освобождает память, занимаемую объектом, вызывается финализатор. До тех пор объект существует в памяти. Ну и когда программа завершается, то конечно, все выделенные ресурсы освобождаются.
@@selfedu_rus Аа, понятно, а подскажите ещё, пожалуйста. Я изучаю django и в нём есть предустановленные модели. Так вот, когда мы создаём собственную модель для базы данных, где хранятся ссылки на экземпляры этих классов или они сами? И в какой момент они создаются? В момент добавления записей на сайте?
Просто, ранее, в Python, мы привязывали экземпляр к переменной, и там было всё понятно, а здесь никаких явных привязок не видно.
@@ResellerRus чтобы это понять вам лучше посмотреть занятие по метаклассам (я там этот вопрос затрагиваю), ну а ссылки внутри самого фреймворка, он всем там управляет ))
При реализации в классе магического метода __del__ и инициализации объекта класса нулем, данный метод не вызывается, однако он вызывается при явном удалении объекта с помощью del.
Она вызовется когда сборщик мусора его станет удалять.
Сергей, почему когда мы пишем метод
def __del__(self):
print('чего-то там, мол удалено')
мы его не переопределяем? Ведь он, по идее, теперь должен только писать, что удалил что-то, но не удалять в действительности.
А если он не переопределяется, то почему такое не работает с __new__?
метод del() действительно не удаляет объект, он вызывается, когда сборщик мусора собирается его удалить (то есть, непосредственно перед удалением объекта), но когда это произойдет - неизвестно. Метод new() также можно переопределять без проблем и вызывается он непосредственно перед созданием самого объекта. Причем, для создания нужно вызвать аналогичный метод из базового класса object.
Добрый день! Вопрос по удалению. Я создал обьект PT. Далее отработало удаление. Но по факту если я обращусь из юпитера к этому обьекту - то он никуда не девался. Не до конца понятно, он удаляет из памяти, но где же тогда сохраняется обьект?
потому что он забыл прописать del.PT мы создали метод но не использовали его
PT = Point()
del.PT
просто забыл, видимо
странно, но почему-то в пайчарме __del__ работает отлично, удаляет действительно после того, как объект стал не нужен и именно тот объект с той же ссылкой, что и был создан.
а если записать тот же пример в юпитер ноутбуке, то там всегда удаляет сразу после вызова __init__ какой-то левый объект c другим адресом.
там, немного другая среда и логика функционирования, вполне может быть
Пробовал разобраться, если актуально, то вот к чему пришёл сам:
jupyter сохраняет объект до следующего запуска текущей ячейки, либо иной ячейки, где будет создан новый объект pt. Т.е. jupyter считает, что объект pt ещё тебе может пригодиться. И в памяти будет существовать старый объект pt до момента его пересоздания в текущей или последующих ячейках.
Также протестил: с закрытием .ipynb все объекты удаляются.
Зачем нужно прописывать __del__, если коллектор все подчистит ?
Нужно ли деструктор __del__ объявлять в классе явно? Или стоит только переопределять его при необходимости добавить новый функционал?
нет, не нужно и почти никогда не определяют
@@selfedu_rus благодарю!
норм
+
согл
у меня вопрос
когда создается объект класса, например test = Class() то как вывести такой принт - "Создается объект test
то есть вывести имя переменной которая и будет объектом класса
В init или new прописываете и все, обычно в init такое пишут
@@selfedu_rus если написать в ините такое то будет выдан адрес. если переопределить метод __str__ то будет ошибка, как я понял какая то зацикленность получится. пробовал в юпитере - не получилось короче.
7:46 то есть он финализировался, когда закончилось выполнение кода?
у меня да, но когда именно сборщик мусора его финализирует никто точно не скажет
Не понял, а ЧТО именно удалится когда мы пишем __del__(self) ? Объекты, на которые ссылались X и Y ?
этот метод вызывается перед освобождением памяти, который занимает объект класса
Спасибо большое. Если __del__ вызывается автоматически в случае отсутствия ссылок на объект без фактического написания данного метода в классе, то возникает вопрос, есть ли случаи когда следует прописывать эту функцию (метод) в классе?
В практике не встречалось, т.е. это очень редко используется, фактически, заложена такая возможность, надо - делаем, не надо - не делаем :)
Не понял... Что значит вызывается без фактического написания метода в классе ? Если метода в классе нет, то он и не вызывается... Метод __del__ не удаляет объект, он выполняет финальные операции перед удалением (если таковые требуются). Удаляет сборщик мусора. Ну если я сам всё правильно понял )
@@mantrida Совершенно верно!
например, чтобы точно проверить, что соединение закрыто, с бд, сокетом и т.п. или например, что некий лок тоже был снят.
В абстракции - гость уходит - проверить не забыл ли он шляпу или зонт.
@@mantrida спасибо за пояснение, а то из ролика это с трудом улавливается. Не расставлены акценты.
подскажите пожалуйста, сколько человек прошли полностью ваш курс?
какой?
@@selfedu_rus добрый, добрый пайтон
@@andreychernykh256 я думаю, человек 200-300
Спасибо...сложно придумать понятнее урок...я летаю ..я в раю (с) Литвинова
Становиться понятно, когда нет Х, У и прочего.
Нужно показывать суть в действии на примере окон, кнопок, действий.
А так это просто баловство цифрами и буквами.
Алгоритм для людей:
Код = наглядный пример (приложение, окно с кнопкой, цвет, звук)
у меня вопрос почему сразу когда хочешь установить данные которые тебе надо почему сразу это не писать в методе типо так:
class Point:
color = 'red'
circle = 2
def __init__(self):
self.x = 8
self.y = 4
Объектов класса обычно больше 1, с таким подходом у всех будут одинаковые данные со старта. Если захочется другие координаты(пример), придется переопределять их каким то методом. Если у вас 1000 точек, то для каждой прописывать то, что можно сделать при создании объекта как минимум утомительно. Надеюсь стало понятнее
раз объект удален, тогда почему к нему все еще можно обращаться?
задайтесь вопросом: что значит объект удален?
На stepik баг, я не могу отзыв на курс оставить
странно, другие вроде писали...
Вы его прошли ? Там надо 80 % пройти, чтобы можно было отзыв оставлять...
там можно поставить отзыв только на странице отзывов. У меня тоже такое было.
окей, но все равно не понятно почему применился метод дел. Ведь мы не переопределяли переменные. У нас есть экземпляр pt у него единственное значение - класс. Далее мы ничего не присваивали переменной pt
программа завершилась. а перед завершением естественно все удаляется из памяти
@@SayXaNow спасибт
Получается метод __init__ это конструктор а __del__ деструктор?
нет, инициализатор и финализатор, за конструктор отвечает метод __new__
Я не понял через dict можно вызвать как словарь, или через geter типо там return ,а просто pt написать ,просто компа нету
Я этот момент не догнал!
малоо, ещее)
Я только пробую, просьба камнями не кидать. А в чем разница внутри класса между обычным "переменная = значение" и "def __init__: self.переменная = значение"? Пробовал- и так и так- всё "принтится" и изменяется как при обращении к классу так и к экземпляру класса.
ответ в этом уроке ruclips.net/video/P4CNNo8jWj4/видео.html
@@selfedu_rus благодарю за оперативность, думал что за веткой уже не следят) посмотрю
Зачем так написать ?? Когда можно просто написать в конструкторе??
Зачем переменные pt??
Инициализатор это то же самое, что и конструктор в c#
в Python это не так, конструктор - это метод __new__
Конструктор и деструктор? 🤔
инициализатор и финализатор
@@selfedu_rus в другом виде у вас сказано - конструктор и деструктор😁
@@dadyx85 там неправильно - там старый курс, позже удалю, наверное
@@selfedu_rus нее. Не удаляйте, пожалуйста. Я и тот смотрю и этот. 👍
у меня __del__ не срабатывает
это возможно, очистка происходит в непредсказуемые моменты времени )
на 100К убавилось просмотров 🤣🤣🤣🤣🤣🤣🤣🤣
по сути инит это конструктор
Нет, только инициализатор, конструктор, скорее __new__. Если на собесе сказать как вы, сразу отправят на доучку )
@@selfedu_rus спасибо запомню), я просто не смотрел дальше видосики) сразу аналогию с джава скриптом как то провел)
0:45 методы? может функции лучше называть? слушатель может запутаться
между методами и функциями есть одно важное отличие: методы, как правило, связаны с тем или иным объектом класса и потом им первым параметром передается self; у обычных функций такого нет
Я ведь правильно понял, что инициализатор и финализатор являются аналогами конструктора и деструктора в c++ / c# ?
нет, аналоги конструктора - это __new__, а деструктора как такового нет
@@selfedu_rus спасибо
я один называю "магические методы" дандер методами?