class WorkState: def __init__(self): pass def work(self): pass class Monday(WorkState): def work(self, w): if w.day == 1: print('no happy') else: w.setState(TueToFri()) w.work() class TueToFri(WorkState): def work(self, w): if w.day > 1 and w.day < 6: print('little happy') else: w.setState(Weekend()) w.work() class Weekend(WorkState): def work(self, w): if w.day >= 6 and w.day <= 7: print('happy') else: w.setState(NoVailidDay()) w.work() class NoVailidDay(WorkState): def work(self, w): if w.day > 7: print('no valid day') class Context: state = Monday() day = 2 def setState(self, state): self.state = state def work(self): self.state.work(self) if __name__ == '__main__': context = Context() context.work()