Update a list every time a function within a class is executexecuted with the function arguments and values
在过去的6个月中,我为不同的计算创建了许多类和函数。现在我想把它们加入到一个类中,这样其他用户就可以使用它了。像许多方法一样,可以按顺序执行,并且可能需要对不同的数据集多次运行序列。我想在主类中创建一个函数,它保存了用户使用的过程,这样用户就可以再次运行它,而不必再次执行整个过程。
重要提示:我不想更改已经实现的类,但是如果这是唯一的方法,没有问题。
这个想法或多或少类似于下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) |
例如:
1 2 3 4 5 | a = process.MethodA(2) b = process.MethodB(3) print(process.procedure) >>> [{'Method':'MethodA', 'Arguments':['valueA'], 'Values':[2]}, {'Method':'MethodB', 'Arguments':['valueB'], 'Values':[3]}] |
号
我试过同时使用
有什么办法帮我解决这个问题吗?
谢谢
以下是根据Moinuddin Quadri的建议,如何使用装饰器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
这使得每次调用这些修饰方法时,都将把它们的参数附加到该对象的过程数组中。此修饰符将在非类方法上失败。
调用这些命令:
1 2 3 4 5 6 7 | p = process() p.MethodA(1) p.MethodB(2) p.MethodA(3) p.MethodB(4) print p.procedure |
号
如果打印精美,将导致以下结果:
1 2 3 4 5 6 7 8 9 10 11 12 | [{'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>}] |
其中
在这里阅读更多关于装饰的信息:https://en.wikipedia.org/wiki/python_syntax_and_semantics_decorators