Skip to main content
1 of 2
li.davidm
  • 12.2k
  • 4
  • 32
  • 33

Yes. Instead of passing in the instance attribute at class definition time, check it at runtime:

def check_authorization(f): def wrapper(*args): print args[0].url return f(*args) return wrapper class Client(object): def __init__(self, url): self.url = url @check_authorization def get(self): print 'get' >>> Client('http://www.google.com').get() http://www.google.com get 

The decorator intercepts the method arguments; the first argument is the instance, so it reads the attribute off of that. You can pass in the attribute name as a string to the decorator and use getattr if you don't want to hardcode the attribute name:

def check_authorization(f, attribute): def wrapper(self, *args): print getattr(self, attribute) return f(self, *args) return wrapper 
li.davidm
  • 12.2k
  • 4
  • 32
  • 33