- note that __getinitargs__() is only for old-style classes

- describe __getnewargs__()
(closes SF bug #873246)
This commit is contained in:
Fred Drake 2004-05-05 04:54:37 +00:00
parent 04d92c37f2
commit 0de77d1d6e
1 changed files with 17 additions and 2 deletions

View 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,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)}{