我有下一个代码
def timer_dec(f):
def wrapper(*args, **kwargs):
t = time.time()
args[0].debug('<{}> start'.format(f.__name__))
res = f(*args, **kwargs)
args[0].debug('<{}> finish'.format(f.__name__))
args[0].debug("Working time for function <%s>: %f" % (f.__name__, time.time() - t))
return res
return wrapper
这很好用:
@timer_dec
class A(object):
pass
但这不起作用:
@timer_dec
class A(object):
pass
class B(A):
pass
TypeError:调用元类base函数()参数时出错 1必须是代码,而不是str
Python版本是2.7
答案 0 :(得分:3)
您似乎使用函数装饰器作为类装饰器。
@timer_dec
class A(object):
pass
相当于
class A(object):
pass
A = timer_dec(A)
因为timer_dec
返回一个函数,A
现在是一个函数。
您可以创建一个类装饰器,将函数装饰器应用于该类的所有方法。请参阅此处以获取示例:Alex Martelli's answer to Applying python decorators to methods in a class
答案 1 :(得分:0)
你的装饰者正在返回一个函数。因此,在装饰器调用之后,名称“A”绑定到函数,而不是类。 然后,您尝试从函数A继承B,这是非法的。