Python: не удается выделить тип X, поиск атрибута завершился неудачно

Я пытаясь обработать namedtuple :

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

Это дает следующий результат:

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

Что я делаю не так? Проблема в том, что Bar является членом Foo ? (Перемещение определения Bar на верхний уровень решает проблему, хотя мне все еще любопытно, почему это происходит.)

42
задан Nick Heiner 13 January 2011 в 05:14
поделиться