Состояние - позволяет объекту изменять свое поведение при изменении внутреннего состояния.
Стоит использовать когда поведение объекта зависит от его состояния, когда в коде много условных операторов, проверяющих состояние или для реализации конченых автоматов.
`from abc import ABC, abstractmethod
#Базовый интерфейс состоянияclass DocumentState(ABC): @abstractmethod def publish(self, document): pass
@abstractmethod def approve(self, document): pass
#Конкретные состоянияclass DraftState(DocumentState): def publish(self, document): print("Перевод документа в состояние 'На модерации'") document.state = ModerationState()
def approve(self, document): print("Черновик нельзя одобрить - сначала опубликуйте")
class ModerationState(DocumentState): def publish(self, document): print("Документ уже на модерации")
def approve(self, document): print("Документ одобрен, перевод в состояние 'Опубликован'") document.state = PublishedState()
class PublishedState(DocumentState): def publish(self, document): print("Документ уже опубликован")
def approve(self, document): print("Документ уже опубликован и одобрен")
#Контекстclass Document: def init(self): self.state = DraftState() # Начальное состояние
def publish(self): self.state.publish(self)
def approve(self): self.state.approve(self)
#Использованиеdoc = Document() doc.publish() # Перевод документа в состояние 'На модерации' doc.approve() # Документ одобрен, перевод в состояние 'Опубликован' doc.publish() # Документ уже опубликован #weekofpatterns`