MagicforestA 2022-07-11 14:26 采纳率: 100%
浏览 41
已结题

python装饰器的问题

一般情况下
如果不用decorator,也可以这样表达
subject_matter_function = outer_decorator(inner_decorator(subject_matter_function())))
abcd = subject_matter_function()
所以问题下方代码注释里

```python
def big_container(collective_material):
    def wrapper(our_function):
        def internal_wrapper(*args):
            our_function(*args)
            print('<strong>*</strong> The whole order would be from {} packed with {}'.format(our_function.__name__, collective_material))      #这里的our_function.__name__为什么不显示warehouse_decorator,而显示 internal_wrapper,能否解释一下
            print()
        return internal_wrapper
    return wrapper

def warehouse_decorator(material):
    def wrapper(our_function):
        def internal_wrapper(*args):
            our_function(*args)
            print('<strong>*</strong> Wrapping items from {} with {}'.format(our_function.__name__, material))
            #这里的our_function.__name__就显示pac_books
        return internal_wrapper
    return wrapper

@big_container('plain cardboard')
@warehouse_decorator('bubble foil')
def pack_books(*args):
    print("We'll pack books:", args)

pack_books('Alice in Wonderland', 'Winnie the Pooh')

```

  • 写回答

3条回答 默认 最新

  • CSDN专家-showbo 2022-07-11 15:44
    关注

    多个装饰器的装饰过程是: 离函数最近的装饰器先装饰,然后外面的装饰器再进行装饰,由内到外的装饰过程,big_container的装饰实际是对warehouse_decorator返回函数的装饰

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月19日
  • 已采纳回答 7月11日
  • 创建了问题 7月11日