def wrap(func): def inner(self, *args, **kwargs): print(id(self)) return func(self, *args, **kwargs) return inner class A(object): @wrap def run(self): pass if __name__ == '__main__': a = A() print(id(a)) res = a.run()带参装饰器
def group(name): def wrap(func): def inner(self, *args, **kwargs): print(id(self)) self.role = name return func(self, *args, **kwargs) return inner return wrap class A(object): def __init__(self): self.role = False @group("Student") def run(self): pass if __name__ == '__main__': a = A() print(id(a)) print(a.role) res = a.run() print(a.role)
结果
1930845716880 False 1930845716880 Student类方法作为装饰器
class App: def __init__(self): self.requests_times = 0 def route(self, name): self.requests_times += 1 def wrap(func): def inner(_self, *args, **kwargs): print(id(_self)) _self.role = name return func(_self, *args, **kwargs) return inner return wrap app = App() class A(object): def __init__(self): self.role = False @app.route("Teacher") def run(self): pass if __name__ == '__main__': a = A() print(id(a)) print(a.role) res = a.run() print(a.role) print(app.requests_times)
结果
2179060134432 False 2179060134432 Teacher 1