Python: não é possível selecionar o tipo X, a pesquisa de atributo falhou

Eu estou tentando escolher umanamedtuple:

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()

Isso produz a seguinte saída:

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

O que estou fazendo errado? É o problema queBar é um membro deFoo? (Movendo a definição deBar para o nível superior resolve o problema, embora ainda esteja curioso para saber por que isso acontece.)

questionAnswers(2)

yourAnswerToTheQuestion