python 闭包 + oop

标签 python oop closures

我正在尝试使用 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 使用,闭包函数将绑定(bind)到对象 b,因为上面的代码将导致:

closure 10, 1

我的问题是:有没有办法让closure()方法访问对象a的属性、方法?

谢谢,

最佳答案

给内在的自己另一个名字:

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

此外,与其使用 types.MethodType,不如使用 functools.partial

关于python 闭包 + oop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7692423/

相关文章:

python - 如何解析多个子页面、合并/追加并向上传递到父级?

c++ - 如何处理不明确的模板参数?

swift - 在嵌套函数中使用闭包如何逃逸?

python - 寄生轴出现在两个位置并且重叠

Python & URLLIB2 - 请求网页但不等待响应

Python 基数转换算法不起作用?

Java:OOP 建议和改进小型应用程序的建议

java - 为什么/何时应该使用泛型方法?

c# - 指针类型数组上的 foreach 的闭包语义

python - 为什么这个闭包在Python中是不可能的?