我想将类的方法公开为本地范围内的函数(在装饰之后)。例如,如果我有一个类和decorator:def some_decorator(f):
...transform f...
return decorated_f
class C(object):
def __init__(self,x):
self.x = x
def f(self,y):
"Some doc string"
return self.x + y
def g(self,y,z):
"Some other doc string"
return self.x + y + z
如果我不关心流程的自动化,我可以在模块中添加以下代码:
^{pr2}$
结果如下所示c = C(0)
f(c,1) == c.f(1)
但我希望能自动完成。比如:my_funs = expose_methods(MyClass)
for funname, fun in my_funs.iteritems():
locals()[funname] = some_decorator(fun)
foo = MyClass(data)
some_functionality(foo,*args) == foo.some_functionality(*args)
会做到这一点(尽管这样声明局部变量有点错误)。我怎样才能使方法的所有相关属性正确地转换为函数版本呢?如有任何建议,我将不胜感激。在
p.S
我知道我可以装饰类实例的方法,但这不是我真正想要的。它更多的是关于(1)对函数版本语法的偏好(2)事实上,我的装饰器以奇特和优化的方式使函数映射到对象集合上。通过装饰方法获得行为(2)将需要我的集合类从它们包含的对象继承属性,这与集合语义是正交的。在