from abc import ABC, abstractmethod class ITransport(ABC): # Интерфейс для транспорта @abstractmethod def drive(self): pass ### class Auto(ITransport): # класс машины с реализацией метода drive def drive(self): print("Машина едет по дороге") ### class Driver: # Класс водителя def travel(self, transport: ITransport): transport.drive() ### class IAnimal(ABC): # Интерфейс животного @abstractmethod def move(self): pass ### class Camel(IAnimal): # Класс верблюда def move(self): print("Верблюд идет по пескам пустыни") ### class CamelToTransportAdapter(ITransport): # Адаптер от Camel к ITransport def __init__(self, camel: Camel): self.camel = camel def drive(self): self.camel.move() driver = Driver() # Создаю путешественника auto = Auto() # Создаю машину driver.travel(auto) # Отправляемся в путешествие на машине (использует метод drive у транспорта) camel = Camel() # Встретились пески, надо использовать верблюда camel_transport = CamelToTransportAdapter(camel) # Используем адаптер, по другому реализующий метод drive driver.travel(camel_transport) # Продолжаем путь по пескам пустыни на верблюде