from rainbowadn.instrument import * class Print(Instrumentation): def __init__(self, target, methodname: str, msg: str): super().__init__(target, methodname) self.msg = msg def instrument(self, method, *args, **kwargs): print(self.msg, end=" ") return method(*args, **kwargs) class C: @classmethod def m(cls): print("m") with Print(Instrumentation, "__exit__", "exit"): print1 = Print(C, "m", "1") print2 = Print(C, "m", "2") print3 = Print(C, "m", "3") C.m() print1.__enter__() C.m() print2.__enter__() C.m() print3.__enter__() C.m() print1.__exit__(None, None, None) C.m() print2.__exit__(None, None, None) C.m() print3.__exit__(None, None, None) C.m()