Методы Python Dunder: подробное руководство по магическим методам в Python

В Python «dunder» — это разговорный термин, используемый для обозначения методов «двойного подчеркивания», официально известных как магические методы или специальные методы. Эти методы позволяют определить поведение классов и объектов в ответ на определенные операции. В этой статье мы рассмотрим различные методы dunder в Python с примерами кода, чтобы продемонстрировать их использование и возможности.

  1. __init__(self, ...):
    Метод __init__вызывается при создании объекта. Он инициализирует атрибуты объекта и выполняет всю необходимую настройку.
class MyClass:
    def __init__(self, x):
        self.x = x
obj = MyClass(10)
print(obj.x)  # Output: 10
  1. __str__(self)и __repr__(self):
    Эти методы предоставляют строковое представление объекта. __str__используется для неформального строкового представления, а __repr__обеспечивает более формальное представление.
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __str__(self):
        return f"Point({self.x}, {self.y})"
    def __repr__(self):
        return f"Point({self.x}, {self.y})"
p = Point(3, 4)
print(str(p))   # Output: Point(3, 4)
print(repr(p))  # Output: Point(3, 4)
  1. __len__(self):
    Этот метод позволяет объектам определять свою длину. Обычно он используется для последовательностей, таких как списки или строки.
class MyList:
    def __init__(self, items):
        self.items = items
    def __len__(self):
        return len(self.items)
my_list = MyList([1, 2, 3, 4, 5])
print(len(my_list))  # Output: 5
  1. __getitem__(self, key)и __setitem__(self, key, value):
    Эти методы позволяют получать доступ к объектам с помощью квадратных скобок ([]), например к словарю или списку..
class MyDict:
    def __init__(self):
        self.data = {}
    def __getitem__(self, key):
        return self.data[key]
    def __setitem__(self, key, value):
        self.data[key] = value
d = MyDict()
d["key"] = "value"
print(d["key"])  # Output: value
  1. __iter__(self)и __next__(self):
    Эти методы позволяют перебирать объекты с помощью цикла. __iter__возвращает объект итератора, а __next__извлекает следующий элемент из итератора.
class MyRange:
    def __init__(self, stop):
        self.stop = stop
        self.current = 0
    def __iter__(self):
        return self
    def __next__(self):
        if self.current < self.stop:
            value = self.current
            self.current += 1
            return value
        else:
            raise StopIteration()
r = MyRange(5)
for num in r:
    print(num)  # Output: 0, 1, 2, 3, 4

Методы dunder Python предоставляют мощный механизм для определения пользовательского поведения классов и объектов. Реализуя эти методы, вы можете сделать свой код более выразительным, интуитивным и Pythonic. Понимание и использование методов dunder может значительно улучшить ваши навыки проектирования объектов Python и взаимодействия с ними.