diff options
Diffstat (limited to 'Lib/pickle.py')
-rw-r--r-- | Lib/pickle.py | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py index 7b48527..5275991 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -1034,19 +1034,15 @@ class _Unpickler: def _instantiate(self, klass, k): args = tuple(self.stack[k+1:]) del self.stack[k:] - instantiated = False - if (not args and - isinstance(klass, type) and - not hasattr(klass, "__getinitargs__")): - value = _EmptyClass() - value.__class__ = klass - instantiated = True - if not instantiated: + if (args or not isinstance(klass, type) or + hasattr(klass, "__getinitargs__")): try: value = klass(*args) except TypeError as err: raise TypeError("in constructor for %s: %s" % (klass.__name__, str(err)), sys.exc_info()[2]) + else: + value = klass.__new__(klass) self.append(value) def load_inst(self): @@ -1239,11 +1235,6 @@ class _Unpickler: raise _Stop(value) dispatch[STOP[0]] = load_stop -# Helper class for load_inst/load_obj - -class _EmptyClass: - pass - # Encode/decode longs in linear time. import binascii as _binascii |