New submission from Antony Lee: methodcaller and attrgetter objects seem to be picklable, but in fact the pickling is erroneous:
>>> import operator, pickle >>> pickle.loads(pickle.dumps(operator.methodcaller("foo"))) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: methodcaller needs at least one argument, the method name >>> pickle.loads(pickle.dumps(operator.attrgetter("foo"))) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: attrgetter expected 1 arguments, got 0 When looking at the pickle disassembly, it seems that the argument to the constructor is indeed not pickled. >>> import pickletools; >>> pickletools.dis(pickle.dumps(operator.methodcaller("foo"))) 0: \x80 PROTO 3 2: c GLOBAL 'operator methodcaller' 25: q BINPUT 0 27: ) EMPTY_TUPLE 28: \x81 NEWOBJ 29: q BINPUT 1 31: . STOP highest protocol among opcodes = 2 ---------- components: Library (Lib) messages: 231752 nosy: Antony.Lee priority: normal severity: normal status: open title: Pickling of methodcaller and attrgetter versions: Python 3.4 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue22955> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com