- 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).
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
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: