1

PEP の完全なリスト ( http://legacy.python.org/dev/peps/ ) を開き、キーワードで検索しdecoratorます。

タイトルにこのキーワードを含む 2 つの PEP があります。

しかし、彼らはクラスベースのデコレーターについては何も言いません...

いつ、どのようにしてクラスベースのデコレータが Python に導入されたのだろうか。

更新私は話します:

class NoArgsClassDecorator:

    def __init__(self, f):
        self.f = f

    def __call__(self):
        print('Inside %s.__call__(). You call %s()' % (self.__class__, self.f.__name__))
        self.f()
        print('Inside %s.__call__(). We finish %s()' % (self.__class__, self.f.__name__))

@NoArgsClassDecorator
def hello():
    print('hello')
4

1 に答える 1

2

クラスベースのデコレータは最初から含まれていました。PEP 318のDesign Goalsセクションを引用します。

新しい構文は

  • ユーザー定義の callable を含む任意のラッパーで動作します

鉱山を強調します。

クラスはユーザー定義の callable です。クラスを呼び出すとインスタンスが生成されます。関数と同様に、クラス インスタンスは単なる別のオブジェクトです。

__call__クラスでメソッドを定義することによってインスタンスを呼び出し可能にすることもでき、関数をインスタンスに置き換えることができるという事実は、長い間言語の一部であり、PEP で呼び出される必要はありませんでした。

于 2014-06-02T23:00:57.130 に答える