是。与其在类定义时传递实例属性,不如在运行时检查它:
def check_authorization(f): def wrapper(*args): print args[0].url return f(*args) return wrapperclass 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.comget装饰器截取方法参数;第一个参数是实例,因此它从中读取属性。您可以将属性名称作为字符串传递给装饰器,并
getattr在不想对属性名称进行硬编码时使用:
def check_authorization(attribute): def _check_authorization(f): def wrapper(self, *args): print getattr(self, attribute) return f(self, *args) return wrapper return _check_authorization



