Пользовательский метод __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

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

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

23
задан smackcrane 20 August 2011 в 03:30
поделиться