__len__ -переопределение функции len()
Различные методы, доступные разным типам данных пройденным ранее можно переопределять для класса:
# переопределенная функция, возвращающая размер объекта класса
def __len__(self):
return len(self.some_iterable)
После этого функция len(class) будет работать
__getitem__ -переопределение оператора []
__setitem__ -переопределение оператора []= (задание переменной через индекс/итератор)
class len_test:
def __init__(self, some_iterable):
self.some_iterable = some_iterable
# переопределенная функция, возвращающая элемент объекта класса
def __getitem__(self, i):
return self.some_iterable[i]
# переопределенная функция, изменяющая элемент объекта класса
def __setitem__(self, key, value):
self.some_iterable[key] = value
# переопределенная функция, удаляющая элемент объекта класса
def __delitem__(self, key):
del self.some_iterable[key]
__contains__ — нужен для итерации в циклах через in и для проверок в операторах ветвления
class SomeClass:
def __init__(self):
self.some_iterable = [1, 2]
def __contains__(self, item):
return item in self.some_iterable
my_container = SomeClass()
print(1 in my_container)
print(2 in my_container)
print(3 in my_container)
__mul__-определяет поведение при умножении объекта класса
class SomeClass:
def __init__(self, value):
self.value = value
def __mul__(self, number):
return self.value*number
obj = SomeClass(42)
print(obj * 100) # 4200