python关闭oop

我试图用
python闭包做一些有点奇怪的事(至少对我来说).说我有2个这样的课程:

#!/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

我的问题是:无论如何都要允许closure()方法访问属性,对象的方法是什么?

谢谢,

最佳答案 给内在的自己另一个名字:

def foo(self, a):
    def closuer(b):
        print "closure %d, %d" % (self.val, a)
    return closuer

而且,您可能希望使用functools.partial,而不是使用types.MethodType

点赞