[Python-checkins] peps: Incorporate Guido's decision to go for '__iadd__' for the Python class
georg.brandl
python-checkins at python.org
Wed Mar 23 21:26:37 CET 2011
http://hg.python.org/peps/rev/a7fb43bf8c45
changeset: 143:a7fb43bf8c45
user: Thomas Wouters <thomas at python.org>
date: Wed Aug 23 11:32:01 2000 +0000
summary:
Incorporate Guido's decision to go for '__iadd__' for the Python class
hooks, and trim the 'open isues': PyNumber_InPlacePower() is now a
trinary function, like PyNumber_Power(), and I'm working on the docs and the
library.
files:
pep-0203.txt | 59 ++++++++++++++-------------------------
1 files changed, 21 insertions(+), 38 deletions(-)
diff --git a/pep-0203.txt b/pep-0203.txt
--- a/pep-0203.txt
+++ b/pep-0203.txt
@@ -62,12 +62,12 @@
x += y
- tries to call x.__add_ab__(y), which is the `in-place' variant of
- __add__. If __add_ab__ is not present, x.__add__(y) is
+ tries to call x.__iadd__(y), which is the `in-place' variant of
+ __add__. If __iadd__ is not present, x.__add__(y) is
attempted, and finally y.__radd__(x) if __add__ is missing too.
- There is no `right-hand-side' variant of __add_ab__, because that
+ There is no `right-hand-side' variant of __iadd__, because that
would require for `y' to know how to in-place modify `x', which is
- unsafe to say the least. The __add_ab__ hook should behave similar
+ unsafe to say the least. The __add__ hook should behave similar
to __add__, returning the result of the operation (which could be
`self') which is to be stored in the variable `x'.
@@ -139,22 +139,19 @@
which Python classes can implement to overload the augmented
assignment operations:
- __add_ab__
- __sub_ab__
- __mul_ab__
- __div_ab__
- __mod_ab__
- __pow_ab__
- __lshift_ab__
- __rshift_ab__
- __and_ab__
- __xor_ab__
- __or_ab__
+ __iadd__
+ __isub__
+ __imul__
+ __idiv__
+ __imod__
+ __ipow__
+ __ilshift__
+ __irshift__
+ __iand__
+ __ixor__
+ __ior__
- The `__add_ab__' name is one proposed by Guido[1], and stands for
- `and becomes'. Other proposed names include `__iadd__',
- `__add_in__' and `__inplace_add__'. A firm decision by the BDFL is
- probably needed to finalize this issue.
+ The `i' in `__iadd__' stands for `in-place'.
For C extension types, the following struct members are added:
@@ -260,20 +257,11 @@
Open Issues
- The PyNumber_InPlacePower() function only takes two arguments, not
- one like PyNumber_Power(). This is because there is no way to do
- an inplace three-argument-power trough the augmented assignment
- syntax or the power() function.
-
+ The PyNumber_InPlace API is only a subset of the normal PyNumber
+ API: only those functions that are required to support the
+ augmented assignment syntax are included. If other in-place API
+ functions are needed, they can be added later.
- Possibly a more obvious name for the Python hooks can be found.
- `_ab_' is what Guido proposed[1] as a working name, and comes from
- an old Algol-68 naming convention.
-
-
- Documentation needs to be written. The reference manual, the `dis'
- section of the library manual, and possibly the tutorial.
-
The DUP_TOPX bytecode is a conveniency bytecode, and is not
actually necessary. It should be considered whether this bytecode
@@ -281,10 +269,6 @@
bytecode at this time.
- The standard library should be adjusted to provide augmented
- assignment hooks, where sensible.
-
-
It is not possible to do an inplace operation in the variant of
<builtin type> += <instance object>
@@ -303,8 +287,7 @@
References
[1] http://www.python.org/pipermail/python-list/2000-June/059556.html
- [2]
-http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470
+ [2] http://sourceforge.net/patch?func=detailpatch&patch_id=100699&group_id=5470
[3] PEP 211, Adding New Linear Algebra Operators,
http://python.sourceforge.net/peps/pep-0211.html
--
Repository URL: http://hg.python.org/peps
More information about the Python-checkins
mailing list