Определенный пользователем метод __mul__ не является коммутативным

Я написал класс для представления векторов в Python (в качестве упражнения), и у меня возникли проблемы с расширением встроенных операторов.

Я определил метод __mul__ для векторного класса. Проблема в том, что в выражении x * y интерпретатор вызывает метод __mul__ x, а не y.

Итак, vector(1, 2, 3) * 2 возвращает вектор ‹2, 4, 6>, как и должно быть; но 2 * vector(1, 2, 3) создает TypeError, потому что встроенный класс int не поддерживает умножение на мои пользовательские векторы.

Я мог бы решить эту проблему, просто написав новую функцию умножения

def multiply(a, b):
    try:
        return a * b
    except TypeError:
        return b * a

но это потребует переопределения каждой функции, которую я хочу использовать с моими пользовательскими классами.

Есть ли способ заставить встроенную функцию правильно обрабатывать это?


person smackcrane    schedule 20.08.2011    source источник


Ответы (2)



Я полагаю, что вы ищете __rmul__

person Michael Kent    schedule 20.08.2011