为什么函数 __name__ 返回包装函数名称而不是代码所在函数的名称?

问题描述 投票:0回答:1
def logging_decorator(function):
    def wrapper(*args, **kwargs):
        print(f'This is {function.__name__}')
        output = function(*args, **kwargs)
    return wrapper


@logging_decorator
def a_function(a, b, c):
    print(f'This is the Function name {a_function.__name__}')
    return a * b * c

object = a_function(3, 4, 5)

一直在玩 python 装饰器,我不明白以下内容:

为什么

print(f'This is the Function name {a_function.__name__}')

output 'This is the Function name wrapper'?输出不应该是“This is the Function name a_function”吗?

python function python-decorators args
1个回答
0
投票

定义函数后。

a_function = def (a, b, c){...}

包装器将包装您的函数。你可以这样想象:

a_function = logging_decorator(a_function)

函数

logging_decorator
返回一个函数名
wrapper
。现在,
a_function
只是一个参考,链接到功能
wrapper

为了得到你所期望的,我试过这个:

from functools import wraps

def logging_decorator(function):
    @wraps(function)
    def wrapper(*args, **kwargs):
        print(f'This is {function.__name__}')
        output = function(*args, **kwargs)
    return wrapper


@logging_decorator
def a_function(a, b, c):
    print(f'This is the Function name {a_function.__name__}')
    return a * b * c

@logging_decorator
def b_function(a, b, c):
    print(f'This is the Function name {b_function.__name__}')
    return a * b * c

object = a_function(3, 4, 5)
object = b_function(3, 4, 5)

它解决了你的问题。

© www.soinside.com 2019 - 2024. All rights reserved.