Issue 47206: pickle docs are wrong about nested classes (original) (raw)
https://docs.python.org/3.10/library/pickle.html#what-can-be-pickled-and-unpickled says that only "classes that are defined at the top level of a module" can be pickled. But in fact these work fine in current Python, probably since 3.3 when qualname was added (https://docs.python.org/3/library/stdtypes.html#definition.qualname). Similarly, the docs claim only top-level functions can be pickled, but in fact methods nested in classes work fine.
Example script demonstrating that these work:
import pickle
class X: class Y: pass
def method(self):
pass
print(pickle.dumps(X.Y)) print(pickle.loads(pickle.dumps(X.Y)))
print(pickle.dumps(X.Y())) print(pickle.loads(pickle.dumps(X.Y())))
print(pickle.dumps(X.method)) print(pickle.loads(pickle.dumps(X.method)))