From: Guido van Rossum Date: Wed, 19 Dec 2001 16:55:02 +0000 (+0000) Subject: Pickler.save(): Fix for SF bug #494904: Cannot pickle a class with a X-Git-Tag: v2.2.1c1~297 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f048a8f6d79173cc1da1bf12c60ae06fea36762c;p=thirdparty%2FPython%2Fcpython.git 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(). --- diff --git a/Lib/pickle.py b/Lib/pickle.py index 8a079255f130..4cc6629d532e 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -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)