Elementor Header #8

43. Цепочка вызовов

Добро пожаловать на 43-й урок по Python! Сегодня мы обсудим концепцию цепочки вызовов (или «method chaining») в Python. Эта техника позволяет вызывать несколько методов подряд на одном объекте, что делает код более компактным и удобочитаемым.

Что такое цепочка вызовов?

Цепочка вызовов — это стиль программирования, при котором несколько методов вызываются последовательно на одном объекте, где каждый метод возвращает объект, на котором можно вызвать следующий метод. Это позволяет писать более лаконичный и выразительный код, избегая промежуточных переменных.

Примеры использования цепочки вызовов

Пример 1: Цепочка вызовов со строками

Строки в Python поддерживают множество методов, которые могут быть использованы в цепочке вызовов.

				
					text = "   hello world   "
result = text.strip().upper().replace("WORLD", "Python")
print(result)  # Вывод: HELLO Python

				
			

В этом примере:

  1. strip() удаляет пробелы в начале и в конце строки.
  2. upper() преобразует строку в верхний регистр.
  3. replace() заменяет подстроку «WORLD» на «Python».

Пример 2: Цепочка вызовов с пользовательскими классами

Можно создавать свои классы, которые поддерживают цепочку вызовов, возвращая self из методов.

				
					class NumberManipulator:
    def __init__(self, value):
        self.value = value
    
    def add(self, number):
        self.value += number
        return self
    
    def multiply(self, number):
        self.value *= number
        return self
    
    def subtract(self, number):
        self.value -= number
        return self
    
    def get_value(self):
        return self.value

# Создание объекта и использование цепочки вызовов
manipulator = NumberManipulator(10)
result = manipulator.add(5).multiply(2).subtract(3).get_value()
print(result)  # Вывод: 23

				
			

В этом примере:

  1. Метод add добавляет число к значению и возвращает объект self.
  2. Метод multiply умножает значение и возвращает объект self.
  3. Метод subtract вычитает число из значения и возвращает объект self.
  4. Метод get_value возвращает конечный результат.

Создание цепочки вызовов в собственных классах

Чтобы поддерживать цепочку вызовов в собственных классах, каждый метод, который должен участвовать в цепочке, должен возвращать объект self. Рассмотрим это на примере:

				
					class StringBuilder:
    def __init__(self, initial_text=""):
        self.text = initial_text
    
    def append(self, additional_text):
        self.text += additional_text
        return self
    
    def prepend(self, additional_text):
        self.text = additional_text + self.text
        return self
    
    def capitalize(self):
        self.text = self.text.capitalize()
        return self
    
    def get_text(self):
        return self.text

# Создание объекта и использование цепочки вызовов
builder = StringBuilder("world")
result = builder.prepend("Hello, ").capitalize().append("! How are you?").get_text()
print(result)  # Вывод: Hello, world! How are you?

				
			

Заключение

Сегодня мы изучили концепцию цепочки вызовов в Python. Вы узнали, как использовать методы как выражения и как создавать собственные методы для поддержки цепочек вызовов в своих классах. Эта техника позволяет делать код более лаконичным и удобочитаемым.

logo