我可以弄清楚python的行为。这是代码示例:
def foo():
print('hello from initial foo')
def using_foo():
foo()
def wrapper(func):
def foo():
print('Now is overload foo')
print('Hello from wrapper')
func()
using_foo()
wrapper(using_foo)
这将打印:
你好,最初的foo
你好来自包装器
你好,最初的foo
但是我希望:
你好,最初的foo
你好来自包装器
现在是重载foo
因为下一个可以正常工作:
def foo():
print('Hello from initial foo')
def using_foo():
foo()
using_foo()
if True:
def foo():
print('now it is overload foo')
using_foo()
输出:
你好,最初的foo
现在它是重载foo
答案 0 :(得分:1)
您只是误输入了func()
而不是foo()
:
def foo():
print('hello from initial foo')
def using_foo():
foo()
def wrapper(func):
def foo():
print('Now is overload foo')
print('Hello from wrapper')
foo()
using_foo()
wrapper(using_foo)
输出:
你好,最初的foo
包装师你好
现在是重载foo
答案 1 :(得分:0)
您还可以返回内部函数并从外部调用它。对于您当前的示例,这可能是一个过分的矫正。但是,当您深入了解装饰器时,该技术肯定会有所帮助。
def foo():
print('hello from initial foo')
def using_foo():
foo()
def wrapper(func):
def foo():
print('Now is overload foo')
print('Hello from wrapper')
return foo
using_foo()
call_inner_foo = wrapper(using_foo)
call_inner_foo()