Discuss / Python / 装饰模式实现是不是没法在执行原函数后追加操作?

装饰模式实现是不是没法在执行原函数后追加操作?

_Again_

#1 Created at ... [Delete] [Delete and Lock User]

Python 教程装饰模式

有几个需求: 1.函数需要有/无参数 2.装饰函数需要有无参数 3.函数还是原来的调用方法 4.函数属性还是原来的结果 5.装饰新的功能

这里就有一个疑惑了,装饰的新功能貌似只能用于原执行之前。我能不能让他在执行后附加执行一些东西呢?

另外那一章节后面有些朋友公布了他们的答案,但觉得好像不能解决我的疑惑,想请老师或者其他大神帮我解惑。

1.原函数后面执行 别人有三种方法,第一种像我代码那样写,但是实际上并不能后补代码

另一种直接执行了,不作参数返回原函数,这种虽然执行效果看是对的,但是已经丧失了原来的函数特性

第三种return func_decorater_before,func,func_decorater_after; 貌似看起来也有一样效果,但是当函数赋值到变量的时候不同,实际上也不对。

import functools

def decorater_param_f(*args_o, **kw_o):
    def decorater_f(func):
        @functools.wraps(func)
        def decorater_inner(*args, **kw):
            print('decorate %s() ↑:' % func.__name__)
            fr = func(*args, **kw)
            print('decorate %s() ↓:' % func.__name__)
            return fr
        return decorater_inner
    return decorater_f

@decorater_param_f('x+y=')
def func(x,y):
    return x+y

print("\n")
f = func
print(f(1,2))
# decorate func() ↑:
# decorate func() ↓:
# 3
print("\n函数名:")
print(func.__name__)
# 函数名:
# func

print("\n")
print(func(1,2))
# decorate func() ↑:
# decorate func() ↓:
# 3

  • 1

Reply