0

Pythonデコレータ関数は引数をサポートしているか、実装はどうですか

def decorator(fn, decorArg):
    print "I'm decorating!"
    print decorArg
    return fn

class MyClass(object):
    def __init__(self):
        self.list = []

    @decorator
    def my_function(self, funcArg = None):
        print "Hi"
        print funcArg

実行時にこのエラーが発生しました

TypeError: decorator() takes exactly 2 arguments (1 given)

@decorator(arg) または @decorator arg を試しました。それもうまくいきませんでした。これまでのところ、これが可能かどうか疑問に思っています

4

1 に答える 1

3

次のようなものが必要になると思います。

class decorator:
    def __init__ (self, decorArg):
        self.arg = decorArg

    def __call__ (self, fn):
        print "I'm decoratin!"
        print self.arg
        return fn

class MyClass (object):
    def __init__ (self):
        self.list = []

    @decorator ("foo")
    def my_function (self, funcArg = None):
        print "Hi"
        print funcArg

MyClass ().my_function ("bar")

または、BlackNight が指摘したように、ネストされた関数を使用します。

def decorator (decorArg):
    def f (fn):
        print "I'm decoratin!"
        print decorArg
        return fn
    return f
于 2013-03-02T07:04:25.153 に答える