Python: no se puede encurtir el tipo X, falló la búsqueda de atributos

Estoy tratando de encurtir unnamedtuple:

from collections import namedtuple
import cPickle

class Foo:

    Bar = namedtuple('Bar', ['x', 'y'])

    def baz(self):
        s = set()
        s.add(Foo.Bar(x=2, y=3))
        print cPickle.dumps(s)

if __name__ == '__main__':
    f = Foo()
    f.baz()

Esto produce el siguiente resultado:

Traceback (most recent call last):
  File "scratch.py", line 15, in <module>
    f.baz()
  File "scratch.py", line 11, in baz
    print cPickle.dumps(s)
cPickle.PicklingError: Can't pickle <class '__main__.Bar'>: attribute lookup __main__.Bar failed

¿Qué estoy haciendo mal? Es el problema queBar es miembro deFoo? (Mover la definición deBar al nivel superior resuelve el problema, aunque todavía tengo curiosidad por qué sucede esto).

Respuestas a la pregunta(3)

Su respuesta a la pregunta