Python装饰器使函数忘记它属于一个类

Python装饰器使函数忘记它属于一个类,第1张

Python装饰器使函数忘记它属于一个类

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的建议。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5057412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存