Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: visitor, pattern, architecture

Что такое паттерн Посетитель (Visitor)?

Этот вопрос проверяет знание паттерна Посетитель и его применения для разделения логики и структуры объекта.

Короткий ответ

Паттерн Посетитель позволяет добавлять новые операции к объектам без изменения их классов. Это достигается через внешний класс "посетитель", который реализует логику, применимую к объектам разных типов.

Длинный ответ

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

Пример из реальной жизни:
Представьте музей, где гид (посетитель) проходит через разные залы (объекты) и рассказывает про экспонаты. Каждый зал остаётся неизменным, но гид адаптирует свой рассказ для каждого зала.

Реализация в Python:

class Visitor:
    	def visit_circle(self, circle):
        	print(f"Вычисление площади круга с радиусом {circle.radius}")

    	def visit_rectangle(self, rectangle):
        	print(f"Вычисление площади прямоугольника {rectangle.width}x{rectangle.height}")

class Shape:
    	def accept(self, visitor):
        	pass

class Circle(Shape):
    	def __init__(self, radius):
        	self.radius = radius

    	def accept(self, visitor):
        	visitor.visit_circle(self)

class Rectangle(Shape):
    	def __init__(self, width, height):
        	self.width = width
        	self.height = height

    	def accept(self, visitor):
        	visitor.visit_rectangle(self)

visitor = Visitor()
circle = Circle(10)
rectangle = Rectangle(5, 10)

circle.accept(visitor)
rectangle.accept(visitor)

Когда использовать:

  • Если часто нужно добавлять новые операции к объектам.

  • Когда изменение классов объектов нежелательно (например, сторонний код).

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    8

Навыки

  • Python

    Python

Ключевые слова

#visitor

#pattern

#architecture

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.