def at_time(time_of_day, _actions={}):
    def decorator(func):
        def wrapper(self, time_of_day):
            for cls in type(self).__mro__:
                if func := _actions.get((f'{cls.__qualname__}.{name}', time_of_day)):
                    return func(self)
            raise ValueError(f'No {name} found in the {time_of_day} time')
        name = func.__name__
        _actions[func.__qualname__, time_of_day] = func
        return wrapper
    return decorator
 
class PersonalChef():
    @at_time('morning')
    def cook(self):
        print("Cooking breakfast")
 
    @at_time('evening')
    def cook(self):
        print("Cooking dinner")
 
class PersonalChefUK(PersonalChef):
    @at_time('evening')
    def cook(self):
        print("Cooking supper")
 
PersonalChef().cook('morning')
PersonalChef().cook('evening')
PersonalChefUK().cook('morning')
PersonalChefUK().cook('evening')
				ZGVmIGF0X3RpbWUodGltZV9vZl9kYXksIF9hY3Rpb25zPXt9KToKICAgIGRlZiBkZWNvcmF0b3IoZnVuYyk6CiAgICAgICAgZGVmIHdyYXBwZXIoc2VsZiwgdGltZV9vZl9kYXkpOgogICAgICAgICAgICBmb3IgY2xzIGluIHR5cGUoc2VsZikuX19tcm9fXzoKICAgICAgICAgICAgICAgIGlmIGZ1bmMgOj0gX2FjdGlvbnMuZ2V0KChmJ3tjbHMuX19xdWFsbmFtZV9ffS57bmFtZX0nLCB0aW1lX29mX2RheSkpOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKHNlbGYpCiAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZidObyB7bmFtZX0gZm91bmQgaW4gdGhlIHt0aW1lX29mX2RheX0gdGltZScpCiAgICAgICAgbmFtZSA9IGZ1bmMuX19uYW1lX18KICAgICAgICBfYWN0aW9uc1tmdW5jLl9fcXVhbG5hbWVfXywgdGltZV9vZl9kYXldID0gZnVuYwogICAgICAgIHJldHVybiB3cmFwcGVyCiAgICByZXR1cm4gZGVjb3JhdG9yCgpjbGFzcyBQZXJzb25hbENoZWYoKToKICAgIEBhdF90aW1lKCdtb3JuaW5nJykKICAgIGRlZiBjb29rKHNlbGYpOgogICAgICAgIHByaW50KCJDb29raW5nIGJyZWFrZmFzdCIpCgogICAgQGF0X3RpbWUoJ2V2ZW5pbmcnKQogICAgZGVmIGNvb2soc2VsZik6CiAgICAgICAgcHJpbnQoIkNvb2tpbmcgZGlubmVyIikKCmNsYXNzIFBlcnNvbmFsQ2hlZlVLKFBlcnNvbmFsQ2hlZik6CiAgICBAYXRfdGltZSgnZXZlbmluZycpCiAgICBkZWYgY29vayhzZWxmKToKICAgICAgICBwcmludCgiQ29va2luZyBzdXBwZXIiKQoKUGVyc29uYWxDaGVmKCkuY29vaygnbW9ybmluZycpClBlcnNvbmFsQ2hlZigpLmNvb2soJ2V2ZW5pbmcnKQpQZXJzb25hbENoZWZVSygpLmNvb2soJ21vcm5pbmcnKQpQZXJzb25hbENoZWZVSygpLmNvb2soJ2V2ZW5pbmcnKQ==