¿Por qué no funciona el débilref en este método encuadernado?

Tengo un proyecto en el que estoy tratando de usar débiles con devoluciones de llamada, y no entiendo lo que estoy haciendo mal. He creado una prueba simplificada que muestra el comportamiento exacto con el que estoy confundido.

¿Por qué en esta prueba test_a funciona como se esperaba, pero el punto débil para self.MyCallbackB desaparece entre la inicialización de la clase y la llamada test_b? Pensé que mientras exista la instancia (a), la referencia a self.MyCallbackB debería existir, pero no existe.

import weakref

class A(object):
    def __init__(self):

        def MyCallbackA():
            print 'MyCallbackA'
        self.MyCallbackA = MyCallbackA

        self._testA = weakref.proxy(self.MyCallbackA)
        self._testB = weakref.proxy(self.MyCallbackB)

    def MyCallbackB(self):
        print 'MyCallbackB'

    def test_a(self):
        self._testA()

    def test_b(self):
        self._testB()

if __name__ == '__main__':
    a = A()    
    a.test_a()
    a.test_b()

Respuestas a la pregunta(3)

Su respuesta a la pregunta