我正在尝试创建一个装饰器,它在方法启动时记录时间,方法名称和此方法的参数。
这个装饰器在某些情况下有效,但我想让它在尽可能多的情况下工作。所以我想让它既可以作为普通方法也可以作为类方法。
def log(func):
@wraps(func)
def wrapper(*args, **kwargs):
log(func.__name__ + '; ARGS: {}'.format(','.join(str(args))))
return func(*args, **kwargs)
return wrapper
存在一些问题:
它不适用于类方法。为了使其在课堂上发挥作用,我必须将self
作为第一个参数def wrapper(*args, **kwargs):
和此处return func(*args, **kwargs)
。
我想让它适用于所有类型的参数(列表,字符串,整数,字母等)。这仅适用于字符串和整数(分别用于浮点数等)
奇怪的是,如果我在一个以两个整数作为参数的方法上使用它,它会将其打印到日志中:name_of_function; ARGS: (,5,,, ,6,)
如果您帮助我解决任何这些问题,我将不胜感激。
答案 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'))