クラスフィールドをクラスメソッドのデコレータに引数として渡すにはどうすればよいですか?

DDD
リリース: 2024-10-18 12:03:56
オリジナル
317 人が閲覧しました

How to Pass a Class Field to a Decorator on a Class Method as an Argument?

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

クラス フィールドをクラス メソッドのデコレータに引数として渡すには、次のアクセスが必要です。クラス定義時ではなく、実行時のフィールド。方法は次のとおりです:

1.メソッドの引数をインターセプト

デコレーターは、ラッパー関数を使用してメソッドの引数をインターセプトできます。ラッパーへの最初の引数はインスタンス (self) になります。

<code class="python">def check_authorization(f):
    def wrapper(*args):
        print(args[0].url)
        return f(*args)
    return wrapper</code>
ログイン後にコピー

2. Getattr を使用してフィールドに動的にアクセスします

または、フィールド名を文字列としてデコレータに渡し、getattr を使用してアクセスすることもできます:

<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>
ログイン後にコピー

このメソッドを使用すると、デコレータは

<code class="python">@check_authorization("url")
def get(self):
    do_work()</code>
ログイン後にコピー

この例では、デコレータは実行時にインスタンスの url 属性にアクセスします。

以上がクラスフィールドをクラスメソッドのデコレータに引数として渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!