将类字段传递给类方法装饰器
当尝试将类字段传递给类方法上的装饰器时,您可能会遇到错误提示该字段不存在。出现这种情况是因为您试图在类定义时传递该字段,但该字段在该阶段可能不可用。
解决方案 1:运行时检查
要解决此问题,请考虑在运行时检查该字段。这可以通过修改装饰器来拦截方法参数来实现,其中第一个参数将是实例。然后可以使用 .:
<code class="python">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()</code>
解决方案 2:属性名称为字符串
如果您希望避免在装饰器中硬编码属性名称来访问实例属性,您可以将其作为字符串传递:
<code class="python">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</code>
以上是如何将类字段传递给类方法装饰器的详细内容。更多信息请关注PHP中文网其他相关文章!