Пусть есть такой класс студент, создадим его экземпляр
class Student:
def __init__(self, name, marks):
self.name = name
self.marks = list(marks)
st1 = Student('Евгений', [5, 5, 3, 2, 5])
Думаю понятно как обращаться к элементам списка marks: st1.marks[2]
А если хочется напрямую? st1[2]. Перехочется😂 - очевидно получим ошибку.❌
Это можем поправить, добавив метод
__getitem__' - для получения значений.def __getitem__(self, item): # item - ключ/индекс
return self.marks[item]
Добавим метод
__setitem__ - для изменения значений, например: по типу st1[2] = 4,def __setitem__(self, key, value): # key - индекс, value - # значение
self.marks[key] = value
Думаю уже догадались какой остался и для чего:
__delitem__' - для удаления значенийdef __delitem__(self, key): # key - индекс
self.marks.pop(key)
Можно в эти методы дописывать необходимые вам проверки, чтобы как было задумано использовать пользовательский класс. Но и без этого будут вылезать ошибки, при неверном использовании, т.к. мы (в данном случае) будем уже работать со стандартными типами данных, в частности со списком.
Приведу пару примеров модернизации (смотреть в комменты)
Как вам такие "магические" методы? 👇
🔥 — Огонь, приму на вооружение!
🤔 — Знал, но освежил память.
💬 — Есть вопросы в комментарии!