Обновлять список каждый раз, когда функция внутри класса выполняется с помощью аргументов и значений функции

За последние 6 месяцев я создал много классов и функции для разных вычислений. Теперь я хотел бы присоединиться к ним в класс, чтобы его могли использовать другие пользователи. Как и многие из методов, они могут выполняться последовательно, и последовательность может потребоваться несколько раз для разных наборов данных. Я хотел бы создать функцию в основном классе, которая сохраняет процедуру, используемую пользователем, чтобы пользователь мог запустить ее снова, не пройдя всю процедуру снова.

Важно: я не хотел бы менять классы, которые уже были реализованы, но если это единственный способ, не проблема.

Идея была бы более или менее похожа на приведенный ниже код:

class process(object): def __init__(self): self.procedure = [] def MethodA(valueA): pass def MethodB(valueB): pass def UpdateProcedure(self, method, arguments, values): # Execute this every time that MethodA or MethodB is executed. new = {'Method':method, 'Arguments':arguments, 'Values':values} self.procedure.append(new) 

Например:

 a = process.MethodA(2) b = process.MethodB(3) print(process.procedure) >>> [{'Method':'MethodA', 'Arguments':['valueA'], 'Values':[2]}, {'Method':'MethodB', 'Arguments':['valueB'], 'Values':[3]}] 

Я попытался использовать функции inspect.currentframe и __getattribute__ вместе, но я не получил хороших результатов.

Любые идеи, которые помогут мне в этом вопросе?

благодаря

Вот как использовать декоратор, по предложению Моинуддина Квадри:

 def remember(func): def inner(*args, **kwargs): args[0].procedure.append({'method': func, 'args': args, 'kwargs': kwargs}) return func(*args, **kwargs) return inner class process(object): def __init__(self): self.procedure = [] @remember def MethodA(self, valueA): pass @remember def MethodB(self, valueB): pass 

Это делает так, что каждый раз, когда вызывается каждый из этих украшенных методов, он добавляет свои аргументы в массив процедур этого объекта. Этот декоратор не будет работать с неклассическими методами.

Вызов этих команд:

 p = process() p.MethodA(1) p.MethodB(2) p.MethodA(3) p.MethodB(4) print p.procedure 

приведет к следующему примеру:

 [{'args': (<__main__.process object at 0x7f25803d28d0>, 1), 'kwargs': {}, 'method': <function MethodA at 0x7f25803d4758>}, {'args': (<__main__.process object at 0x7f25803d28d0>, 2), 'kwargs': {}, 'method': <function MethodB at 0x7f25803d4848>}, {'args': (<__main__.process object at 0x7f25803d28d0>, 3), 'kwargs': {}, 'method': <function MethodA at 0x7f25803d4758>}, {'args': (<__main__.process object at 0x7f25803d28d0>, 4), 'kwargs': {}, 'method': <function MethodB at 0x7f25803d4848>}] 

где <__main__.process object at 0x7f25803d28d0> является объектом процесса ( self )

Подробнее о декораторах здесь: https://en.wikipedia.org/wiki/Python_syntax_and_semantics#Decorators