日志装饰器的方法

时间:2015-09-04 19:06:41

标签: python string types int decorator

我正在尝试创建一个装饰器,它在方法启动时记录时间,方法名称和此方法的参数。

这个装饰器在某些情况下有效,但我想让它在尽可能多的情况下工作。所以我想让它既可以作为普通方法也可以作为类方法。

def log(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
            log(func.__name__ + '; ARGS: {}'.format(','.join(str(args))))
            return func(*args, **kwargs)

    return wrapper

存在一些问题:

  1. 它不适用于类方法。为了使其在课堂上发挥作用,我必须将self作为第一个参数def wrapper(*args, **kwargs):和此处return func(*args, **kwargs)

  2. 我想让它适用于所有类型的参数(列表,字符串,整数,字母等)。这仅适用于字符串和整数(分别用于浮点数等)

  3. 奇怪的是,如果我在一个以两个整数作为参数的方法上使用它,它会将其打印到日志中:name_of_function; ARGS: (,5,,, ,6,)

  4. 如果您帮助我解决任何这些问题,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

这有帮助吗?

def func_detail(func):
    def func_wrapper(*args,**kwargs):
        print(func.__name__)
        print(*args)
        print(kwargs)
        return func(*args,**kwargs)
    return func_wrapper

@func_detail
def foo(a,b,c,**kwargs):
    return 1

class Person(object):
    @func_detail
    def __init__(self,name,age,**kwargs):
        self.name = name
        self.age = age
        self.email = kwargs.get('email',None)

me = Person('taesu',24,email='me@me.com')

print(foo(1,1.1,'4',test='me'))