From: Fred Drake Date: Wed, 5 May 2004 04:54:37 +0000 (+0000) Subject: - note that __getinitargs__() is only for old-style classes X-Git-Tag: v2.4a1~451 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0de77d1d6e899ee98d4ddfb1ac3272b0f69b1199;p=python - note that __getinitargs__() is only for old-style classes - describe __getnewargs__() (closes SF bug #873246) --- diff --git a/Doc/lib/libpickle.tex b/Doc/lib/libpickle.tex index 88168386ef..e6e8c7cd0b 100644 --- a/Doc/lib/libpickle.tex +++ b/Doc/lib/libpickle.tex @@ -448,8 +448,8 @@ for more details. When a pickled class instance is unpickled, its \method{__init__()} method is normally \emph{not} invoked. If it is desirable that the -\method{__init__()} method be called on unpickling, a class can define -a method \method{__getinitargs__()}, which should return a +\method{__init__()} method be called on unpickling, an old-style class +can define a method \method{__getinitargs__()}, which should return a \emph{tuple} containing the arguments to be passed to the class constructor (i.e. \method{__init__()}). The \method{__getinitargs__()} method is called at @@ -458,6 +458,21 @@ the instance. \withsubitem{(copy protocol)}{\ttindex{__getinitargs__()}} \withsubitem{(instance constructor)}{\ttindex{__init__()}} +New-style types can provide a \method{__getnewargs__()} method that is +used for protocol 2. Implementing this method is needed if the type +establishes some internal invariants when the instance is created, or +if the memory allocation is affected by the values passed to the +\method{__new__()} method for the type (as it is for tuples and +strings). Instances of a new-style type \class{C} are created using + +\begin{alltt} +obj = C.__new__(C, *\var{args}) +\end{alltt} + +where \var{args} is the result of calling \method{__getnewargs__()} on +the original object; if there is no \method{__getnewargs__()}, an +empty tuple is assumed. + \withsubitem{(copy protocol)}{ \ttindex{__getstate__()}\ttindex{__setstate__()}} \withsubitem{(instance attribute)}{