Пожалуйста, приведите пример кода
аюсь засолить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
на верхнем уровне решает проблему, хотя мне все равно любопытно, почему это происходит.)