Я построил небольшой декоратор для ведения журнала.Проверьте, является ли метод методом класса и атрибутом вызова
def func_detail(func):
def func_wrapper(*args,**kwargs):
log(func.__name__+' ARGS: {}'.format(str(args)))
return func(*args,**kwargs)
return func_wrapper
Это работает как для объектных методов, так и для обычных методов. Я хочу использовать его в многопоточности. У меня есть класс, который содержит pid
как атрибут объекта. Можно ли изменить декоратор на log
pid
, если он обнаруживает, что метод принадлежит к некоторому классу, и этот класс содержит атрибут 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
Но это не работает вообще. Не могли бы вы помочь мне?
РЕФЕРАТ:
Я хочу, чтобы иметь возможность вызывать атрибут pid
из class
где принадлежит метод (func
) без прохождения self
в качестве аргумента в обертке, потому что в этом случае было бы не работает для методов которые не входят в классы.
Вы сказали, что это не работает. Вы имеете в виду, что вы получаете ошибку атрибута? Если нет, объясните пожалуйста. – KobeJohn
@kobejohn Например, просто печать - print self.pid NameError: глобальное имя «я» не определено. Потому что декоратор не знает, что он будет использоваться для метода объекта. Он также может использоваться вне функции. –