class Component: """Абстрактный класс для всех компонентов.""" def operation(self): raise NotImplementedError("Метод operation должен быть переопределен.") class Leaf(Component): """Листовой элемент, который не имеет подкомпонентов.""" def __init__(self, name): self.name = name def operation(self): return f"Leaf: {self.name}" class Composite(Component): """Композитный элемент, который может содержать другие компоненты.""" def __init__(self, name): self.name = name self.children = [] def add(self, component): self.children.append(component) def remove(self, component): self.children.remove(component) def operation(self): results = [f"Composite: {self.name}"] for child in self.children: results.append(child.operation()) return "\n".join(results) # Пример использования if __name__ == "__main__": # Создаем листья leaf1 = Leaf("Leaf 1") leaf2 = Leaf("Leaf 2") leaf3 = Leaf("Leaf 3") # Создаем композиты composite1 = Composite("Composite 1") composite2 = Composite("Composite 2") # Добавляем листья в композиты composite1.add(leaf1) composite1.add(leaf2) composite2.add(leaf3) composite2.add(composite1) # Вложение composite1 в composite2 # Выполняем операции print(composite2.operation())