subclassing complex

Patrick Maupin pmaupin at gmail.com
Fri Aug 29 14:18:38 EDT 2008


On Aug 29, 4:24 am, Peter Otten <__pete... at web.de> wrote:
> A minimal example is
>
> >>> class Complex(complex):
>
> ...     def __radd__(self, other): print "radd"
> ...>>> 1j + Complex()
>
> 1j
>
> versus
>
> >>> class Int(int):
>
> ...     def __radd__(self, other): print "radd"
> ...>>> 1 + Int()
>
> radd
>
> I think the complex subclass should behave like the int subclass.
> To get an authoritative answer you should file a bug report.


Hmm, good point.  I shouldn't look at newsgroups when I'm too tired to
see the whole problem.

According to the documentation at http://docs.python.org/ref/numeric-types.html:

"Note: If the right operand's type is a subclass of the left operand's
type and that subclass provides the reflected method for the
operation, this method will be called before the left operand's non-
reflected method. This behavior allows subclasses to override their
ancestors' operations."

I think this makes it pretty clear that the OP found a bug in how
complex works.  (Before I read this note, I would have assumed that
the int() handling was broken, but it looks like a supportable design
decision.  Probably whoever implemented it wasn't even thinking about
complex numbers, but for consistency, I would think they should be
made to work the same.)

Regards,
Pat



More information about the Python-list mailing list