PYTHON里的装饰器能装饰类吗
大家好,最近在写程序,很多方法都需要记日志的功能,就尝试使用了PYTHON的DECORATOR,但是假如一个类里20个方法都需要记日志,那么就得在这20个函数前面都加上@wrapper,不知道有没有什么简便的方法,可以使这个类中的函数都被装饰?
def wrapper():
...
class c1:
@wrapper
def f1()
@wrapper
def f2()
...
[解决办法]
似乎没有其他更好的方法。当然,我想可以写一个接口函数,做一个函数列表,调用该接口函数,在列表中查找参数中指定的函数并调用之。在该接口函数中添加你所谓的记录日志功能。
但这样有点为了封装而封装,能解决问题,但长期来说,不合适。
[解决办法]
没有。而且你这个需求本身也是有问题的。比如是否要把继承过来的数据也加上decorator,是否需要把__str__也加上。很少有这样的需求需要处理类中的每个函数。而特别的需求又无法提供准确和可复用的语义。Python的哲学之一是“Explicit is better than implicit”。与其含糊的批量处理,不如明确的手动处理。