Add posting-date. Add note about the copy module. Remove TBD -- this
PEP is complete AFAIAC.
This commit is contained in:
parent
a526eed9cb
commit
4d97872f0d
46
pep-0307.txt
46
pep-0307.txt
|
@ -7,7 +7,7 @@ Status: Active
|
||||||
Type: Standards Track
|
Type: Standards Track
|
||||||
Content-Type: text/plain
|
Content-Type: text/plain
|
||||||
Created: 31-Jan-2003
|
Created: 31-Jan-2003
|
||||||
Post-History: None
|
Post-History: 7-Feb-2003
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
|
@ -599,9 +599,49 @@ Extension registry API
|
||||||
It is up to applications to respect these.
|
It is up to applications to respect these.
|
||||||
|
|
||||||
|
|
||||||
TBD
|
The copy module
|
||||||
|
|
||||||
The rest of this PEP is still under construction!
|
Traditionally, the copy module has supported an extended subset of
|
||||||
|
the pickling APIs for customizing the copy() and deepcopy()
|
||||||
|
operations.
|
||||||
|
|
||||||
|
In particular, besides checking for a __copy__ or __deepcopy__
|
||||||
|
method, copy() and deepcopy() have always looked for __reduce__,
|
||||||
|
and for classic classes, have looked for __getinitargs__,
|
||||||
|
__getstate__ and __setstate__.
|
||||||
|
|
||||||
|
In Python 2.2, the default __reduce__ inherited from 'object' made
|
||||||
|
copying simple new-style classes possible, but slots and various
|
||||||
|
other special cases were not covered.
|
||||||
|
|
||||||
|
In Python 2.3, several changes are made to the copy module:
|
||||||
|
|
||||||
|
- The four- and five-argument return values of __reduce__ are
|
||||||
|
supported.
|
||||||
|
|
||||||
|
- Before looking for a __reduce__ method, the
|
||||||
|
copy_reg.dispatch_table is consulted, just like for pickling.
|
||||||
|
|
||||||
|
- When the __reduce__ method is inherited from object, it is
|
||||||
|
(unconditionally) replaced by a better one that uses the same
|
||||||
|
APIs as pickle protocol 2: __getnewargs__, __getstate__, and
|
||||||
|
__setstate__, handling list and dict subclasses, and handling
|
||||||
|
slots.
|
||||||
|
|
||||||
|
As a consequence of the latter change, certain new-style classes
|
||||||
|
that were copyable under Python 2.2 are not copyable under Python
|
||||||
|
2.3. (These classes are also not picklable using pickle protocol
|
||||||
|
2.) A minimal example of such a class:
|
||||||
|
|
||||||
|
class C(object):
|
||||||
|
def __new__(cls, a):
|
||||||
|
return object.__new__(cls)
|
||||||
|
|
||||||
|
The problem only occurs when __new__ is overridden and has at
|
||||||
|
least one mandatory argument in addition to the class argument.
|
||||||
|
|
||||||
|
To fix this, a __getnewargs__ method should be added that returns
|
||||||
|
the appropriate argument tuple (excluding the class).
|
||||||
|
|
||||||
|
|
||||||
Copyright
|
Copyright
|
||||||
|
|
Loading…
Reference in New Issue