首页  >  文章  >  后端开发  >  如何将类字段传递给类方法装饰器

如何将类字段传递给类方法装饰器

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-18 12:23:03264浏览

How to Pass Class Field to Class Method Decorator

将类字段传递给类方法装饰器

当尝试将类字段传递给类方法上的装饰器时,您可能会遇到错误提示该字段不存在。出现这种情况是因为您试图在类定义时传递该字段,但该字段在该阶段可能不可用。

解决方案 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn