Operator commutativity
Roy Smith
roy at panix.com
Mon Sep 19 08:10:27 EDT 2011
In article <j5797e$s57$1 at speranza.aioe.org>,
Henrik Faber <hfaber at invalid.net> wrote:
> On 19.09.2011 13:23, Paul Rudin wrote:
> > Henrik Faber <hfaber at invalid.net> writes:
> >
> >> How can I make this commutative?
> >
> > Incidentally - this isn't really about commutativity at all - the
> > question is how can you define both left and right versions of add,
> > irrespective of whether they yield the same result.
>
> Right. The operator+ in my case just happens to be commutative and I
> wanted a language way to express this.
>
> > I think __radd__ is what you're after.
>
> It is, thank you very much - I knew there was some way to get this done
> nicely. Perfect! :-)
__radd__() only solves the problem if the left-hand operand has no
__add__() method itself.
class C1:
def __add__(self, other):
print "C1.__add__()"
def __radd__(self, other):
print "C1.__radd__()"
class C2:
def __add__(self, other):
print "C2.__add__()"
def __radd__(self, other):
print "C2.__radd__()"
c1 = C1()
c2 = C2()
c1 + c2
c2 + c1
$ python radd.py
C1.__add__()
C2.__add__()
More information about the Python-list
mailing list