Python: переопределение умножения

20

Итак, у меня есть собственный класс, который имеет функцию __mul__ , которая работает с ints. Однако в моей программе (в библиотеках) ее называют другим способом, т. Е.% Co_de%, где 2 * x принадлежит моему классу. Есть ли способ, с помощью которого я могу использовать функцию x для этого?

    
задан Colin DeClue 01.08.2011 в 00:02
источник

2 ответа

28

Просто добавьте следующее в определение класса, и вам должно быть хорошо:

__rmul__ = __mul__
    
ответ дан Karl Knechtel 01.08.2011 в 00:05
источник
  • Обратите внимание, что это не всегда будет то, что вы хотите. Предположим, что у вас есть векторные и матричные классы, и вы хотите определить умножение между ними, рассматривая вектор как матрицу 1xN. Матричное умножение не является коммутативным, поэтому вам нужно будет повторно переключить порядок аргументов. –  Karl Knechtel 01.08.2011 в 06:24
17

Внесите __rmul__ .

class Foo(object):
    def __mul__(self, other):
        print '__mul__'
        return other
    def __rmul__(self, other):
        print '__rmul__'
        return other

x = Foo()
2 * x # __rmul__
x * 2 # __mul__
    
ответ дан Cat Plus Plus 01.08.2011 в 00:05
источник