ホームページ > バックエンド開発 > Python チュートリアル > クラスフィールドをクラスメソッドデコレータに渡す方法

クラスフィールドをクラスメソッドデコレータに渡す方法

Mary-Kate Olsen
リリース: 2024-10-18 12:23:03
オリジナル
370 人が閲覧しました

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

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