Я пытаюсь сделать что-то немного странное (по крайней мере для меня) с закрытием 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 () доступ к атрибуту, методу объекта a?
Спасибо