Kaydet (Commit) 00fb0c95 authored tarafından Guido van Rossum's avatar Guido van Rossum

_reduce():

  - Fix for SF bug #482752: __getstate__ & __setstate__ ignored (by Anon.)

    In fact, only __getstate__ isn't recognized.  This fixes that.

  - Separately, the test for base.__flags__ & _HEAPTYPE raised an
    AttributeError exception when a classic class was amongst the
    bases.  Fixed this with a hasattr() bandaid (classic classes never
    qualify as the "hard" base class anyway, which is what the code is
    trying to find).
üst 64585f6a
......@@ -46,7 +46,7 @@ _HEAPTYPE = 1<<9
def _reduce(self):
for base in self.__class__.__mro__:
if not base.__flags__ & _HEAPTYPE:
if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE:
break
else:
base = object # not really reachable
......@@ -56,9 +56,14 @@ def _reduce(self):
state = base(self)
args = (self.__class__, base, state)
try:
dict = self.__dict__
getstate = self.__getstate__
except AttributeError:
dict = None
try:
dict = self.__dict__
except AttributeError:
dict = None
else:
dict = getstate()
if dict:
return _reconstructor, args, dict
else:
......
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