Для чего они нужны dunder методы ?

Спросят с вероятностью 3%



Dunder-методы представляют собой специальные методы, которые начинаются и заканчиваются двойным подчёркиванием (например, __init__,Для чего __repr__).



Основные методы и их назначения



1️⃣Инициализация и завершение объектов:

__init__(self, ...): Конструктор класса, вызывается при создании нового экземпляра.

          class MyClass:

def __init__(self, value):

self.value = value



__del__(self): Деструктор, вызывается при удалении объекта.



2️⃣Представление объектов:

__str__(self): Определяет поведение функции str() и print(). Возвращает строковое представление объекта для пользователя.

          class MyClass:

def __init__(self, value):

self.value = value



def __str__(self):

return f'MyClass with value {self.value}'



__repr__(self): Определяет поведение функции repr(). Возвращает строковое представление объекта для разработчика.

          class MyClass:

def __init__(self, value):

self.value = value



def __repr__(self):

return f'MyClass({self.value!r})'





3️⃣Сравнение объектов:

__eq__(self, other): Оператор равенства ==.

__lt__(self, other): Оператор меньше <.

__le__(self, other): Оператор меньше или равно <=.

Аналогично можно определить методыСравнениДля чегоДля чего



4️⃣Арифметические операции:

__add__(self, other): Оператор сложения +.

__sub__(self, other): Оператор вычитания -.

__mul__(self, other): Оператор умножения *.

Аналогично можно определить методы для других арифметических операций:х назначения

Для чего они нДля чего Для чего



5️⃣Контейнерные операции:

__len__(self): Возвращает длину объекта, используется в функции len().

          class MyContainer:

def __init__(self, items):

self.items = items



def __len__(self):

return len(self.items)



__getitem__(self, key): Позволяет доступ к элементам по ключу (используется оператор []).

          class MyContainer:

def __init__(self, items):

self.items = items



def __getitem__(self, index):

return self.items[index]





6️⃣Итерация:

__iter__(self): Возвращает итератор для объекта.

          class MyContainer:

def __init__(self, items):

self.items = items



def __iter__(self):

return iter(self.items)





7️⃣Контекстные менеджеры:

__enter__(self): Определяет действия при входе в контекст (with).

__exit__(self, exc_type, exc_value, traceback): Определяет действия при выходе из контекста.

          class MyContextManager:

def __enter__(self):

print("Entering the context")

return self



def __exit__(self, exc_type, exc_value, traceback):

print("Exiting the context")



with MyContextManager():

print("Inside the context")





Зачем они нужны



1️⃣Упрощение работы с объектами: Позволяют легко определять, как объекты класса должны вести себя при использовании стандартных операторов и функций Python.

2️⃣Читаемость и удобство: Улучшают читаемость и удобство использования кода, делая объекты более интуитивными и естественными для работы.

3️⃣Переиспользование кода: Позволяют реализовать методы один раз и переиспользовать их в различных частях программы, что способствует уменьшению дублирования кода.



Dunder-методы позволяют классам интегрироваться с встроенными операциями и функциями, такими как арифметические операции, сравнения и представления. Они делают работу с объектами интуитивной и упрощают код.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых