fork download
  1. def at_time(time_of_day, _actions={}):
  2. def decorator(func):
  3. def wrapper(self, time_of_day):
  4. for cls in type(self).__mro__:
  5. if func := _actions.get((f'{cls.__qualname__}.{name}', time_of_day)):
  6. return func(self)
  7. raise ValueError(f'No {name} found in the {time_of_day} time')
  8. name = func.__name__
  9. _actions[func.__qualname__, time_of_day] = func
  10. return wrapper
  11. return decorator
  12.  
  13. class PersonalChef():
  14. @at_time('morning')
  15. def cook(self):
  16. print("Cooking breakfast")
  17.  
  18. @at_time('evening')
  19. def cook(self):
  20. print("Cooking dinner")
  21.  
  22. class PersonalChefUK(PersonalChef):
  23. @at_time('evening')
  24. def cook(self):
  25. print("Cooking supper")
  26.  
  27. PersonalChef().cook('morning')
  28. PersonalChef().cook('evening')
  29. PersonalChefUK().cook('morning')
  30. PersonalChefUK().cook('evening')
Success #stdin #stdout 0.04s 9668KB
stdin
Standard input is empty
stdout
Cooking breakfast
Cooking dinner
Cooking breakfast
Cooking supper