<div dir="ltr">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.<div><br></div><div>In general, constructors can accept keyword arguments, and forward their unused arguments to parents effortlessly:</div><div><br></div><div>class A(B):</div><div>    def __init__(self, x, **kwargs):</div><div>         super().__init__(**kwargs)</div><div><br></div><div>will extract x and forward kwargs.</div><div><br></div><div>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</div><div><br></div><div>class A:</div><div>    def _getnewkwargs__(self):</div><div>         return {**super().__getnewkwargs(), a=self.a, b=self.b}  # (new unpacking from PEP448)</div><div><br></div><div>Note how additional kwargs are added to the dict of kwargs specified by the parent objects.</div><div><br></div><div>Best,</div><div><br></div><div>Neil</div></div>