The attached patch makes pickle use an object's __qualname__ attribute if __name__ does not work.
This makes nested classes, unbound instance methods and static methods picklable (assuming that __module__ and __qualname__ give the correct "address").
BTW, It would not be hard to make instance methods picklable (and, as a by-product, class methods) by giving instance methods a __reduce__ method equivalent to
def __reduce__(self):
return (getattr, (self.__self__, self.__name__))
Is there any reason not to make such a change? |