デコレーション
装飾師とは何ですか。
ある関数を別の関数が実行される前に自動的に最初に実行できる構文.
関数を受信してコマンドを追加し、関数の形式の関数として返します.
関数を変更せずに他の機能を実装するために使用します.
アクセサリーを使う
def decorator(func):
def wrapper():
print("start")
func()
print("end")
return wrapper
@decorator
def func():
print('func')
func()
実行結果
start
func
end
上の図に示すように、レコーダは関数を囲む形で構成されています.従って、既存の関数を変更しない場合には、付加機能を実施する際に、レコーダが用いられる.
パラメータ付きレコーダ
def multiple(x):
def real_decorator(func):
def wrapper(a, b):
r = func(a, b)
print(r*x)
return r*x
return wrapper
return real_decorator
@multiple(3)
def add(a, b):
return a+b
add(10, 20)
実行結果
90
クラスとして使用
クラスを使用する場合は、
__call__
メソッドを実装する必要があります.__call__
:呼び出し可能なオブジェクトにする関数.class Decorator:
def __init__(self, function):
self.method = function
def __call__(self):
print('start')
self.method()
print('out')
@Decorator
def func():
print('func')
func()
実行結果
start
func
end
パラメータ付きレコーダ
class IsMultiple:
def __init__(self, x):
self.x = x
def __call__(self, func):
def wrapper(a, b):
r = func(a, b)
return r*self.x
return wrapper
@IsMultiple(3)
def add(a, b):
return a + b
add(10,20)
実行結果
90
Reference
この問題について(デコレーション), 我々は、より多くの情報をここで見つけました https://velog.io/@jinukix/python-데코레이터decoratorテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol