On 15 Okt., 14:34, Mr.SpOOn <[EMAIL PROTECTED]> 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.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to