#18. Магические методы __getitem__, __setitem__ и __delitem__ | ООП Python

preview_player
Показать описание

Узнаете для чего служат магические методы _getitem__(), __setitem__() и __delitem__(). Показывается их работа на конкретном примере объектов пользовательского класса.

Рекомендации по теме
Комментарии
Автор

Когда попал на стажировку в компанию, нужно было добирать знания, многие вещи связанные с ООП понял именно благодаря вашим урокам. До сих пор слежу за каналом и советую людям начинающим путь в программировании именно Вас !

Allgarryyys
Автор

Теперь круг замкнулся. Раньше, когда писал классы даталоадеров под обучение нейронок, использовал магические методы __getitem__ и __len__, которые пишут все, не поясняя тонкостей, и в принципе интуитивно понял, зачем они нужны, однако с погружением в магические методы всё встало на свои места! Спасибо большое, Сергей! Делаете полезное и нужное дело, и, главное, качественно)

gienek_mscislawski
Автор

Я продвигаюсь, хочу сразу заметить, что этот урок очень полезный так как я уверен, что с такими методами многим придется часто встречаться😌 спасибо

Dayplaylist
Автор

Урок #18 = Пройден

Все предельно понятно. Вот это я уже понимаю, полезные методы :)

И с большинством, я соглашусь. Просмотров, с каждым видео все меньше, и тем самым отсеиваются слабые руки. Мне самому пару видео было не то что скучно, а через себя смотрел, где понимал, что эти магические методы, можно будет на практике узнать/пощупать/ и понять, но все же, более менее теорию понять получилось.

Хотите, не хотите, дорогие коллеги программисты, а в один день, мы с вами выпьем кофе за здравие и здоровье, нашего учителя, на террасе Сан-Франциско ))

jaksonmillka
Автор

Огромное спасибо! Полезность таких видео сложно переоценить. Не каждый хороший программист может так понятно объяснить, а без понимания причин и базы происходящих процессов чувствуешь себя мартышкой, обученной бананы по корзинкам раскладывать, почему бананы и зачем по корзинкам - не понимаешь.

Лена-вны
Автор

вот она такая студенческая жизнь :) 0:41
А за урок огромное спасибо!

ЕгорШишкин-гь
Автор

Прикольно, что переопределив таким образом __getitem__. Автоматически появляется возможность брать срезы.

mantrida
Автор

можно еще так реализовать механизм __setitems__
if 0 <= key <= len(self.marks)-1:
#self.marks[key] = value
# else:
# self.marks.append(value)
# print(f'Указанного индекса нет в списке, введенная оценка {value} добавлена в конец списка под индексом {len(self.marks)-1}')
#

orthodox-chanel
Автор

Сергей, Добрый день. Все конечно работает. А почему функция list(marks) не возвращает двойной список, раз вы туда значение в виде списка передали? [[marks]] интересно. Сейчас попробовал и правда если ей передать список то она возвращает этот же список. А если кортеж, то она возвращает список. То есть она получается просто переделывает кортеж в список?

beribanyu
Автор

Я так понимаю, что в этом классе можно использовать не только список, а словарь? И ключом будет название предмета, а не индекс?

Denius
Автор

а как понять когда функция должна вернуть что то, а когда пишем какую либо логику без ретерна?

РустамРаджабов-цм
Автор

правильно ли будет сказать, что переопределив эти методы можно изменить поведение, чтобы к объекту можно было обращаться, изменять или удалять по индексу или ключу, как к определенной коллекции?

zakirovio
Автор

а если у экземпляра класса несколько атрибутов, которые являются коллекциями, списки там словари, как дать понять пайтону какой атрибут я имею ввиду( ведь и в примере на видео можно просто написать после названия экземпляра S1.marks и все эти же операции сработают так же, и присваивание и удаление, так что я не понял зачем эти методы нужны??
Вот что я имел ввиду


class Student:
def __init__(self, name, marks):
self.name = name
self.marks = list(marks)

s = Student('Aleks', [1, 3, 5, 7, 9])
print(s.marks[3])
q = s.marks[2] = 3
print(q)
print(s.marks)
del s.marks[3]
print(s.marks)



Выдало такие результаты:
7
3
[1, 3, 3, 7, 9]
[1, 3, 3, 9]

РустамРаджабов-цм
Автор

а как быть, если объект содержит не один атрибут список, а несколько? Как тогда быть?

Antiqua-Greek-Latin
Автор

Вы применили эти магические методы к списку, а возможно ли тоже самое применить к словарю?

mellicape
Автор

Как правильно будет типизировать key, value, какого типа они должны быть? object?

helish_
Автор

Окей, а что будет, если экземпляр класса будет содержать несколько списков, или список и кортеж?

RoTor_Ex