Перегрузка + для поддержки кортежей

Я бы хотел написать что-то вроде этого на python:

a = (1, 2)
b = (3, 4)
c = a + b # c would be (4, 6)
d = 3 * b # d would be (9, 12)

Я понимаю что вы можете перегружать операторы для работы с пользовательскими классами, но есть ли способ перегрузить операторы для работы с парами?

Конечно, такие решения, как

c = tuple([x+y for x, y in zip(a, b)])

, работают, но, не говоря уже о производительности, они не совсем так же красиво, как перегрузка оператора + .

Конечно, можно определить функции add и mul , такие как

def add((x1, y1), (x2, y2)):
    return (x1 + x2, y1 + y2)

def mul(a, (x, y)):
    return (a * x, a * y)

, но по-прежнему иметь возможность писать q * b + r вместо ] add (times (q, b), r) было бы лучше.

Идеи?

EDIT : Кстати, я понимаю, что, поскольку + в настоящее время отображает для конкатенации кортежей, было бы неразумно пересматривать его, даже если это возможно. Вопрос по-прежнему актуален для - , например =)

5
задан Clément 27 April 2011 в 09:41
поделиться