Python 闭包 + 面向对象编程
我正在尝试用 Python 的闭包做一些我觉得有点奇怪的事情。假设我有两个类,像这样:
#!/usr/bin/python
import types
def method_a(self):
print "ma %d" % self.val
class A(object):
def __init__(self):
self.val = 5
pass
def foo(self, a):
def closure(self):
print "closure %d, %d" % (self.val, a)
return closure
class B(object):
def __init__(self):
self.val = 10
pass
def foo(self):
print "B::foo %d" % self.val
a = A()
b = B()
b.undo = types.MethodType(a.foo(1), b)
b.undo()
所以,对象 a 的方法返回一个闭包,这个闭包会被对象 b 使用,并且这个闭包函数会绑定到对象 b 上,像上面的代码那样会得到:
closure 10, 1
我的问题是:有没有办法让这个闭包方法访问对象 a 的属性和方法呢?
谢谢,
1 个回答
7
给内部的自我起个别名:
def foo(self, a):
def closuer(b):
print "closure %d, %d" % (self.val, a)
return closuer
另外,与其使用 types.MethodType,不如试试 functools.partial。