Прокси — это интерфейс для базовой функциональности. У него много целей. Его можно использовать для добавления других функций, добавления некоторого контроля доступа к базовым функциям и т. д.

В отличие от декораторов, прокси имеет тот же интерфейс, что и базовый класс, и не обеспечивает какой-либо агрегации функций.

Существует множество различных типов прокси-шаблонов. В этом блоге мы будем обсуждать защиту прокси.

Прокси защиты

Допустим, у вас есть следующий код -

class Car:
    def __init__(self, driver):
        self.driver = driver
    def drive(self):
        print (f'Car is being driven by {self.driver.name}')

class Driver:
    def __init__(self, name, age):
        self.name = name
        self.age = age


if __name__ == '__main__':
    driver1 = Driver("Bob", 23)
    car = Car(driver1)
    car.drive()

# OUTPUT
# Car is being driven by Bob

Теперь, если вы хотите добавить функциональность, когда автомобилем не может управлять человек моложе 16 лет, вам придется изменить функцию привода и нарушить принцип открытия-закрытия.

Но вы все равно можете сделать это с помощью прокси. Создайте класс CarProxy, который позаботится об этой дополнительной функциональности.

class Car:
    def __init__(self, driver):
        self.driver = driver
    def drive(self):
        print (f'Car is being driven by {self.driver.name}')

class Driver:
    def __init__(self, name, age):
        self.name = name
        self.age = age

class CarProxy:
    def __init__(self, driver):
        self.driver = driver
        self._car = Car(self.driver)

    def drive(self):
        if self.driver.age < 16:
            print("Too young to drive")
        else:
            self._car.drive()

if __name__ == '__main__':
    driver1 = Driver("Bob", 23)
    car = CarProxy(driver1)
    car.drive()

    driver2 = Driver("Bob", 12)
    car = CarProxy(driver2)
    car.drive()

# OUTPUT
# Car is being driven by Bob
# Too young to drive

Ссылка — https://www.udemy.com/course/design-patterns-python/

Следуйте моему списку шаблонов дизайна Python, чтобы узнать больше — https://medium.com/@rjrichajain00/list/python-design-patterns-4dbd16f87858