自己引数によるクラス メソッドの装飾
Python では、追加の動作を追加したり、引数を検証したりするためにクラス メソッドを装飾できます。ただし、インスタンス属性を引数としてデコレータに渡すのは難しい場合があります。
これに対処するための 1 つの解決策は、デコレータ内で実行時に属性値を動的に取得することです。これを実現する方法は次のとおりです。
<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 中国語 Web サイトの他の関連記事を参照してください。