[Python-Dev] nonstandard behavior of reflected functions (original) (raw)

Ehsan Amiri ehsanamiri at gmail.com
Sun Oct 18 22:39:15 CEST 2009


I see the same behaviour, moreover when I change class Quantity to a classic class (removing '(object)'), it works as expected. (i.e. Quanitity.add() is called after the fourth print. I run Python 2.6.2 on Vista.

On Sun, Oct 18, 2009 at 7:50 AM, Darren Dale <dsdale24 at gmail.com> wrote:

According to http://docs.python.org/reference/datamodel.html , the reflected operands functions like radd "are only called if the left operand does not support the corresponding operation and the operands are of different types. [3] For instance, to evaluate the expression x - y, where y is an instance of a class that has an rsub() method, y.rsub(x) is called if x.sub(y) returns NotImplemented."

Consider the following simple example: ========================== class Quantity(object): def add(self, other): return 'add called' def radd(self, other): return 'radd called' class UnitQuantity(Quantity): def add(self, other): return 'add called' def radd(self, other): return 'radd called' print 'Quantity()+Quantity()', Quantity()+Quantity() print 'UnitQuantity()+UnitQuantity()', UnitQuantity()+UnitQuantity() print 'UnitQuantity()+Quantity()', UnitQuantity()+Quantity() print 'Quantity()+UnitQuantity()', Quantity()+UnitQuantity() ========================== The output should indicate that add was called in all four trials, but the last trial calls radd. Interestingly, if I comment out the definition of radd in UnitQuantity, then the fourth trial calls add like it should. I think this may be an important bug. I'm running Python 2.6.4rc1 (r264rc1:75270, Oct 13 2009, 17:02:06) an ubuntu Karmic. Is it a known issue, or am I misreading the documentation? Thanks, Darren


Python-Dev mailing list Python-Dev at python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/ehsanamiri%40gmail.com -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20091018/e998d19b/attachment-0001.htm>



More information about the Python-Dev mailing list