Daniel Shahaf added the comment: Eli Bendersky wrote on Tue, Jan 01, 2013 at 15:54:00 +0000: > Why did you change the class name, by the way, I don't think it's > a valid change at least for 3.3 in terms of backwards compatibility. >
With unmodified tip of 3.4: >>> import pickle, xml.etree.ElementTree as ET >>> pickle.dumps(ET.Element('foo')) Traceback (most recent call last): File "<stdin>", line 1, in <module> _pickle.PicklingError: Can't pickle <class 'Element'>: attribute lookup builtins.Element failed I added the "_elementtree" to the tp_name in order to bypass the above error. Module-qualified names were in use elsewhere (including by _elementtree._element_iterator) so it seemed reasonable. I'll defer to you about compatibility implications of this change. > Regarding that compatibility, and even easier idea would be for the > C pickle to return the same __dict__ implicitly gathered from the > Python version, and then only one version of the unpickle is required. That makes sense. But going forward it might be even better to define an explicit __reduce__/__getstate__ for the Python version too, so if the instance dict grows new members, they won't get serialised unintentionally. (This consideration is also why C code in the latest patch makes some effort to notice unknown args in the dict.) ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue16076> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com