Steven D'Aprano wrote:
After playing around with various combinations of C1, C2, D1 and D2, it
seems to me that the rule is:
If the right-hand argument is a subclass of the left-hand argument, AND also
defines __radd__ directly rather than inheriting it, then its __radd__
method is called before the left-hand argument's __add__ method.
which strikes me as a strangely specific and not very useful rule. I suspect
it might be an accident of implementation rather than a deliberate feature.
Update to rule:
If the right-hand argument is a subclass of the left-hand argument AND a
__radd__ is defined anywhere between the left-hand argument's class up
to and including the right-hand argument's class, then __radd__ is
called, otherwise the left-hand arguments __add__ is called.
And it makes perfect sense -- a + b is, after all, an __add__ function;
the only reason to call __radd__ instead is if it has been defined for a
subclass, and the only reason to define it is because it needs something
different from a + b that a doesn't know about.
Probably not a clear explanation -- maybe somebody else can dress it up
a bit.
~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list