From f048a8f6d79173cc1da1bf12c60ae06fea36762c Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 19 Dec 2001 16:55:02 +0000 Subject: 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(). --- Lib/pickle.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Lib/pickle.py b/Lib/pickle.py index 8a07925..4cc6629 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) -- cgit v0.12