У меня есть класс, как это:Это подходящее использование для декораторов?
class MyClass(object):
def __init__(self, name):
self.name = name
self.df = pd.read_table(name)
и кучу способов, как это:
def valid_cond1(self):
# check if cond1 is satisfied with respect to self.df and return
# a DataFrame of rows not satisfying cond1
def valid_cond2(self):
# same deal
и т.д. В конце концов, я хочу взять выход каждого из этих методов, и верните клиенту форматированный список неудачных строк. Я могу сделать это для valid_cond1
, регулируя реализацию следующим образом:
def valid_cond1(self):
# err_df = rows of self.df not meeting cond1
bad_lines = []
for ix, val in err_df.iterrows():
bad_lines.append("Error in line %s: %s. Cond1 not met.." % (ix,val))
return bad_lines
Но я не хочу, чтобы написать ту же логику для каждой из этих функций (возможно, есть очень многие из них).
Является ли это местом, где я мог бы использовать декоратор? Или есть другой способ добиться желаемого поведения?
Так насколько доступным является 'err_df' вне каждого метода? Декоратор может получить доступ к глобальным переменным, 'self', входящим аргументам и возвращаемому значению, без проблем. Поэтому, если вы * вернули * 'err_df', то уверен, никаких проблем, декоратор может сделать это для вас. В противном случае просто используйте функцию. –
Напишите метод, который принимает другой метод в качестве входных данных, вызывает его и форматирует результат по вашему желанию. – kindall
Есть ли вероятность, что вы хотите получить данные из этих функций по другим причинам? Вы можете написать для этого отдельную функцию форматирования и передать ей результаты. Разделяйте логику программы из презентации. – tdelaney