def getstate(x): getstate = getattr(x, '__getstate__', None) if getstate is None: return None if not isbound(getstate): return None # 'x' can be a class! then __getstate__ won't work state = getstate() if isdict(state): return state return {'__state__': state} # wrap up a non-dict state in dict
def getnewargs(x): getnewargs = getattr(x, '__getnewargs__', None) if getnewargs is None: return () if not isbound(getnewargs): return () return getnewargs()