inconsistency with += between different types ?
Donn Cave
donn at u.washington.edu
Wed Aug 7 15:27:02 EDT 2002
Quoth Andreas.Leitgeb at siemens.at (Andreas Leitgeb):
...
| To Christopher and other defendants of status quo:
| Do you know of any real use that a not-self-mutating __ixxx__
| may have, which its non-i version __xxx__ could not do ?
| (I do *not* intend to argue that just because you perhaps cannot think
| of any at the moment, that the suggestion would necessarily be good,
| but if instead you happen to know a good use then we could instantly
| short-cut the discussion.)
Consider essentially numeric objects. Wouldn't you want them to
act like builtin numberic types?
class Currency:
def __init__(self, w, f):
if type(w) != type(0) or type(f) != type(0):
raise ValueError, 'ints only'
self.unit = w
self.pennies = f
def __iadd__(self, v):
return self + v
def __add__(self, v):
if type(v) == type(0):
return self.__class__(self.unit + v, self.pennies)
elif type(v) == type(self):
return self.__class__(self.unit + v.unit, self.pennies + v.pennies)
else:
raise ValueError, 'int or currency'
def __str__(self):
return '%d.%02d' % (self.unit, self.pennies)
d = Currency(2, 25)
c = d
d += 2
print c, d
I don't know which I'd prefer. I don't think the in place op
feature is useful enough to justify its flaws, period.
Donn Cave, donn at u.washington.edu
More information about the Python-list
mailing list