Python でインスタンス属性をクラスメソッドデコレータに渡すにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-18 11:55:02
オリジナル
867 人が閲覧しました

How to Pass Instance Attributes to Class Method Decorators in Python?

自己引数によるクラス メソッドの装飾

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート