我为了记录目的而构建了一个小装饰器。检查方法是否是类方法和调用属性
def func_detail(func):
def func_wrapper(*args,**kwargs):
log(func.__name__+' ARGS: {}'.format(str(args)))
return func(*args,**kwargs)
return func_wrapper
这适用于对象方法和普通方法。我想在多线程中使用它。我有一个包含pid
作为对象属性的类。如果它检测到该方法属于某个类并且此类包含属性pid
,是否可以将修饰器更改为log
pid
?
我已经试过:
def func_detail(func):
def func_wrapper(*args,**kwargs):
log('PID: '+self.pid if self.pid is not None else ' '+func.__name__+' ARGS: {}'.format(str(args)))
return func(*args,**kwargs)
return func_wrapper
但这并不是在所有工作。你可以帮帮我吗?
摘要:
我希望能够调用从那里方法(func
)所属的class
属性pid
没有传球self
作为参数传递给包装,因为在这种情况下它不会工作的方法这些不在类内。
你说这行不通。你的意思是你得到一个属性错误?如果没有请解释。 – KobeJohn
@kobejohn例如只是打印 - 打印self.pid NameError:全局名称'self'未定义这是因为装饰器不知道它将用于对象方法。它也可以用于函数之外。 –