デコレータfunctools.wrap
呼び出し方法functools.update_wrapper
なぜ `update_wrapper`の代わりに` wrap`をデコレータとして使うのですか?
update_wrapper
の代わりにwrap
を使用する必要があることをご理解ください。 wrap
の代わりにupdate_wrapper
をデコレータとして使用できないのはなぜですか?例えば
:
from functools import update_wrapper
def wrap1(func):
def call_it(*args, **kwargs):
"""wrap func: call_it1"""
print('before call in call_it1')
return func(*args, **kwargs)
return update_wrapper(call_it, func)
@wrap1
def hello1():
"""test hello 1"""
print('hello world1')
hello1()
と
def wrap3(func):
@wraps(func)
def call_it(*args, **kwargs):
"""wrap func: call_it3"""
print('before call in call_it3')
return func(*args, **kwargs)
return call_it
@wrap3
def hello3():
"""test hello 3"""
print('hello world3')
hello3()
作品。しかし、なぜ以下のことはしないのですか?エラー
TypeError: update_wrapper() missing 1 required positional argument: 'wrapper'
The declarations of wraps
and update_wrapper
と
def wrap2(func):
@update_wrapper(wrapped=func) # error, see below
def call_it(*args, **kwargs):
"""wrap func: call_it2"""
print('before call in call_it2')
return func(*args, **kwargs)
return call_it
@wrap2
def hello2():
"""test hello 2"""
print('hello world2')
hello2()
ある:
@functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
と
functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
位置引数wrapper
がの最初の引数であります、 なぜ次のようなものがcall_it
としての引数としてwrapper
になるのでしょうか?
@update_wrapper(wrapped=func)
def call_it(*args, **kwargs):
代わりwrap
を使用してのデコレータとしてupdate_wrapper
を使用するために、いくつかの方法はありますか?デコレータとして@
を使用して