/
GlebBavykin
/
python_sketches
Обзор
Документация
Войти
/
GlebBavykin
/
python_sketches
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
design_patterns/behavioral/visitor.py
49 строк
1018 B
Gleb Bavykin
renaming
11 июл 2026, 19:01
11 июл 2026, 19:01
4a59f68
Код
Авторство
О чём код?
import logging from typing import Protocol, runtime_checkable from design_patterns.structural.composite import Expression, Number logger = logging.getLogger(__name__) @runtime_checkable class Visitorable(Protocol): """ Visitor interface """ def visit_expression(self, expression: Expression) -> None: ... def visit_number(self, number: Number) -> None: ... class CompositeVisitor: """ Concrete Visitor """ @staticmethod def visit_expression(expression: Expression) -> None: logger.info(expression) @staticmethod def visit_number(number: Number) -> None: logger.info(number) class Item(Protocol): """ Item interface """ def accept(self, visitor: Visitorable) -> None: ... class NumberItem(Item, Number): def accept(self, visitor: Visitorable) -> None: visitor.visit_number(self) class ExpressionItem(Item, Expression): def accept(self, visitor: Visitorable) -> None: visitor.visit_expression(self)