参考
在写这个问题之前,我已经参考了以下一些有趣的问题,并且觉得这个场景没有被解释/覆盖:
- 如何制作功能装饰器链?(特别是答案#2)
- 如何在类中装饰方法?
- 类中的 Python 装饰器
- 基于 Python 类的装饰器,带有可以装饰方法或函数的参数(接近但不完全符合我的要求)
我有一个function
如下:
def simple_function():
print 'this is a simple_function'
而且,我有以下class
一些methods
class Test:
def Test_method_1(self, func, args=None, kwargs=None):
print 'this is Test::Test_method_1'
<execute some instructions here>
def Test_method_2(self):
print 'this is Test::Test_method_2'
我正在使用Test_method_1
,simple_function
如下:
t = Test()
t.Test_method_1(simple_function)
假设如果simple_function
接受任意参数,则Test_method_1
调用如下:
def simple_function(a, b, c, d=f, g=h):
print 'this is a simple_function'
t = Test()
t.Test_method_1(simple_function, args=[a, b, c], kwargs={d:f, g:h})
现在,我想Test_method_2
用作decorator version
. Test_method_1
所以simple_function
定义可以写成如下:
t = Test()
@t.Test_method_2
def simple_function():
print 'this is a simple_function'
注意:Test_method_2
将Test_method_1
使用适当的参数调用。
现在的问题:
- 1 - 这可能吗?
- 2 - 如果可能,如何将装饰函数的名称(此处
simple_function
)作为参数传递给Test_method_2
(包括self
)? - 3 - [这是杀手问题,我相信] 我想将任意参数传递给
Test_method_2
(装饰器)和simple_function
(被装饰的函数) -*args and **kwargs
- 应该如何Test_method_2
定义接收参数(包括self
)?
Test_method_2
作为带有任意参数的装饰器的用法simple_function
如下:
t = Test()
@t.Test_method_2(a, b, c, d, e=f, g=h)
def simple_function(x, y, z, n=m):
print 'this is a simple_function'