Bruce Christensen wrote: > Thanks! That helps a lot. PEP 307 and the pickle module docs describe the end > result pretty well, but they don't always make it clear where things are > implemented. I'm trying to make sure that I'm getting the right interaction > between object.__reduce(_ex)__, pickle, and copy_reg..
You really should ignore the existance of copy_reg._reduce_ex. It's an implementation detail - it could have been implemented just as well in C directly, in which case you couldn't as easily replace it with a different function. It might be implemented that way in the next release, or the entire __reduce_ex__ implementation might be lifted to Python some day. > One (hopefully) last question: is object.__reduce(_ex)__ really implemented in > object? Sure. > Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "C:\Python24\lib\pickle.py", line 1386, in dumps > Pickler(file, protocol, bin).dump(obj) > File "C:\Python24\lib\pickle.py", line 231, in dump > self.save(obj) > File "C:\Python24\lib\pickle.py", line 313, in save > rv = reduce(self.proto) > File "<stdin>", line 2, in bomb > Exception: KABOOM! (<object object at 0x01E3C448>, 0) {} You don't get a stack frame for C functions (normally, anyway): there is no file/line number information available. The reduce thing you are seeing really comes from # Check for a __reduce_ex__ method, fall back to __reduce__ reduce = getattr(obj, "__reduce_ex__", None) Regards, Martin _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com