Overloading operators

Kay Schluehr kay.schluehr at gmx.net
Thu Oct 16 06:22:55 CEST 2008


On 15 Okt., 14:34, Mr.SpOOn <mr.spoo... at gmail.com> wrote:
> Hi,
> in a project I'm overloading a lot of comparison and arithmetic
> operators to make them working with more complex classes that I
> defined.
>
> Sometimes I need a different behavior of the operator depending on the
> argument. For example, if I compare a object with an int, I get a
> result, but if I compare the same object with a string, or another
> object, I get another result.
>
> What is the best way to do this? Shall I use a lot of "if...elif"
> statements inside the overloaded operator? Or is there a more pythonic
> and dynamic way?

I can't see anything wrong about it. Sometimes I try to avoid
isinstance() though because it is a rather slow operation. If the
majority of operations is single-typed one can also use a try-stmt:

    def __add__(self, other):
        try:
            return self._val + other
        except TypeError:
            return self.__add__(SomeWrapper(other))

and compare performance using a profiler. Notice that also

    if type(obj) == T:
        BLOCK

is much faster than isinstance() but it's not OO-ish and very rigid.



More information about the Python-list mailing list