gpt4 book ai didi

python - 在Python中,如何获取带有参数传递给装饰器的函数名称?

转载 作者:行者123 更新时间:2023-12-01 00:46:04 25 4
gpt4 key购买 nike

我正在尝试创建一个装饰器,它将验证参数是否存在并检索被装饰的方法的名称。

我能够在函数的第二层中访问方法的名称,但不能在第一层中访问。

例如,我有这个装饰器

def p_decorate(name, *a, **k):
print(name + ' is at object: ')
print a #I would like to get the method object here
def fn(*a, **k)
print a #object prints here instead
return fn
return p_decorate

我想装饰这个类

class Person(object):
@p_decorate('John')
def get_fullnameobject(self):
return self.name

我希望它打印:

John is at object: (<function get_fullnameobject at 0x000000003745A588>,)
(<function get_fullnameobject at 0x000000003745A588>,)

但是输出是:

John is at object: ()
(<function get_fullnameobject at 0x000000003745A588>,)

最佳答案

函数p_decorate调用,仅使用参数John(*a** k 都将为空),因此您将得到 a 的空元组。

请注意,返回的 fn 可调用对象随后将使用 get_fullnameobject 可调用对象进行调用。

更重要的是,您当前的实现是不完整的,因为您永远无法调用该方法——您需要另一个闭包才能真正做到这一点。

关于python - 在Python中,如何获取带有参数传递给装饰器的函数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56978425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com