Commit cef0b49d authored by Guido van Rossum's avatar Guido van Rossum

Pickler.save(): Fix for SF bug #494904: Cannot pickle a class with a

metaclass, reported by Dan Parisien.

Objects that are instances of custom metaclasses, i.e. whose class is
a subclass of 'type', should be pickled the same as new-style classes
(objects whose class is 'type').  This can't be done through a
dispatch table entry, and the __reduce__ trick doesn't work for these,
since it finds the unbound __reduce__ for instances of the class
(inherited from 'object').  So check explicitly using issubclass().
parent 01264ee1
......@@ -163,6 +163,10 @@ class Pickler:
try:
f = self.dispatch[t]
except KeyError:
if issubclass(t, TypeType):
self.save_global(object)
return
pid = self.inst_persistent_id(object)
if pid is not None:
self.save_pers(pid)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment