使用自参装饰类方法
在 Python 中,可以对类方法进行修饰以添加其他行为或验证其参数。然而,将实例属性作为参数传递给装饰器可能具有挑战性。
为了解决这个问题,一种解决方案是在运行时在装饰器中动态检索属性值。以下是实现此目的的方法:
<code class="python">from functools import wraps def check_authorization(f): @wraps(f) def wrapper(*args): print(args[0].url) return f(*args) return wrapper class Client: def __init__(self, url): self.url = url @check_authorization def get(self): print('get') Client('http://www.google.com').get()</code>
在此示例中, check_authorization 装饰器拦截方法参数并从第一个参数(即实例本身)检索实例的 URL 属性。然后,您可以在装饰器中使用该属性的值来执行任何必要的授权检查。
为了获得更大的灵活性,您可以修改装饰器以接受属性名称作为参数:
<code class="python">def check_authorization(attribute): def _check_authorization(f): @wraps(f) def wrapper(self, *args): print(getattr(self, attribute)) return f(self, *args) return wrapper return _check_authorization</code>
这允许您指定要在运行时检查的属性名称,从而使您可以更好地控制装饰过程。
以上是如何在 Python 中将实例属性传递给类方法装饰器?的详细内容。更多信息请关注PHP中文网其他相关文章!