考虑这种情况:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import functools
def wrapmethod(f):
@functools.wraps(f)
def wrap(*args, **kwargs):
print '>> %s' % (f.func_name)
# Here I'll do pre-processing
r = f(*args, **kwargs)
# Here I'll do post-processing
return r
return wrap
@wrapmethod
def foo():
pass
class Test(object):
@wrapmethod
def foo(self):
pass
test = Test()
test.foo()
foo()
它会输出这个,正如你在http://codepad.org/Y4xXyjJO中看到的那样:
>> foo
>> foo
我想知道在第一行打印 Test.foo
的方法,指示方法链接到的类 .
有任何想法吗?它有可能吗?
先感谢您 .
2 回答
这不容易实现 . 如果你添加了
self
作为内部函数的第一个参数,你可以使用self.__class__.__name__
来访问类名,但是在装饰没有参数的无类函数时它会破坏(如果它有参数,它会认为第一个参数为self
) .因此,除非有办法确定是否已在对象上下文中调用函数,否则无法执行此操作 .
顺便说一句..你需要什么?这听起来像是可以以更好的方式解决的问题 .
实际上,您可以使用inspect模块来获取函数的签名,并假设您遵循通过第一个参数'self'引用类对象的约定,您可以执行以下操作:
这将打印方法模块,类和名称,或仅打印模块和名称,如果这是一个函数