連番ファイル - Pythonで2つのデコレータを1つにまとめることはできますか?




python 連番ファイル 出力 (3)

はい。 デコレータの定義を参照してください。

このようなものはうまくいくはずです:

def multiple_decorators(func):
   return decorator1(decorator2(func))

@multiple_decorators
def foo(): pass

Pythonで2つのデコレータを1つの新しいデコレータに結合する方法はありますか?

私は関数に複数のデコレータを適用することができますが、2つを新しいものに組み合わせる簡単な方法があるかどうか不思議でした。


もう少し一般的です:

def composed(*decs):
    def deco(f):
        for dec in reversed(decs):
            f = dec(f)
        return f
    return deco

その後、

@composed(dec1, dec2)
def some(f):
    pass

@dec1
@dec2
def some(f):
    pass

デコレータが追加の引数を取らない場合は、

def compose(f, g):
    return lambda x: f(g(x))

combined_decorator = compose(decorator1, decorator2)

@combined_decorator
def f():
    pass

同等になります

@decorator1
@decorator2
def f():
    pass






decorator