Claudiu的答案是正确的,但是您也可以通过从
self参数中删除类名来作弊。在继承的情况下,这将产生误导性的日志语句,但会告诉您正在调用其方法的对象的类。例如:
from functools import wraps # use this to preserve function signatures and docstringsdef logger(func): @wraps(func) def with_logging(*args, **kwargs): print "Entering %s.%s" % (args[0].__class__.__name__, func.__name__) return func(*args, **kwargs) return with_loggingclass C(object): @logger def f(self): passC().f()
就像我说的那样,如果您从父类继承了一个函数,这将无法正常工作。在这种情况下,您可能会说
class B(C): passb = B()b.f()
Entering B.f,
EnteringC.f因为那是正确的类,所以您实际上希望在其中获取消息。另一方面,这可能是可以接受的,在这种情况下,我会建议这种方法胜过Claudiu的建议。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)