[Python-ideas] pickle does not work properly with cooperative multiple inheritance. Propose: "__getnewkwargs__".

Neil Girdhar mistersheik at gmail.com
Wed Sep 18 21:12:13 CEST 2013


An alternative is to allow __getnewargs__ to return a "PassedArgSpec" as I 
described in another idea.

On Wednesday, September 18, 2013 12:21:37 PM UTC-4, Neil Girdhar wrote:
>
> My understanding of cooperative multiple inheritance is that a class often 
> doesn't know how your parent classes want to be constructed, pickled, etc. 
> and so it delegates to its parents using super.
>
> In general, constructors can accept keyword arguments, and forward their 
> unused arguments to parents effortlessly:
>
> class A(B):
>     def __init__(self, x, **kwargs):
>          super().__init__(**kwargs)
>
> will extract x and forward kwargs.
>
> Unfortunately, the same mechanism is not easily available for pickling 
> because __getnewargs__ returns only a tuple.  If there were a 
> __getnewkwargs__ method, then we could have
>
> class A:
>     def _getnewkwargs__(self):
>          return {**super().__getnewkwargs(), a=self.a, b=self.b}  # (new 
> unpacking from PEP448)
>
> Note how additional kwargs are added to the dict of kwargs specified by 
> the parent objects.
>
> Best,
>
> Neil
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20130918/1c4357a0/attachment.html>


More information about the Python-ideas mailing list