]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
- note that __getinitargs__() is only for old-style classes
authorFred Drake <fdrake@acm.org>
Wed, 5 May 2004 04:57:01 +0000 (04:57 +0000)
committerFred Drake <fdrake@acm.org>
Wed, 5 May 2004 04:57:01 +0000 (04:57 +0000)
- describe __getnewargs__() (with index entry)
(closes SF bug #873246)

Doc/lib/libpickle.tex

index aee148e328c7f96095ae990f76de73866ee746f8..50bc66f18e7d29a6cb1b13301fb9d438d4bcd8c6 100644 (file)
@@ -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,23 @@ the instance.
 \withsubitem{(copy protocol)}{\ttindex{__getinitargs__()}}
 \withsubitem{(instance constructor)}{\ttindex{__init__()}}
 
+\withsubitem{(copy protocol)}{\ttindex{__getnewargs__()}}
+
+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)}{