Python: переопределение умножения - PullRequest
32 голосов
/ 01 августа 2011

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

Ответы [ 2 ]

34 голосов
/ 01 августа 2011

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

__rmul__ = __mul__
24 голосов
/ 01 августа 2011

Реализуйте также __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__
...