我正在尝试创建一个decorator,它将验证参数是否存在,并检索被修饰的方法的名称
我可以在函数的第二层访问方法的名称,但不能访问第一层
例如,我有一个装饰师
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")
返回实际的decorator,它将get_fullnameobject
作为其f
参数,并返回要绑定到get_fullnameobject
的新fn
对象。如果没有decorator语法,用法如下函数
p_decorate
正被调用,只有参数John
(*a
和**k
都是空的),因此您将得到a
的空元组需要注意的是,返回的
fn
可调用函数随后将与get_fullnameobject
可调用函数一起调用更重要的是,您当前的实现是不完整的,因为您永远无法调用需要另一个闭包才能真正实现的方法
相关问题 更多 >
编程相关推荐