Определить псевдонимы методов в Python?
у меня есть векторный класс, и я определил __mul__ способ умножения вектора на число.
здесь __mul__ способ :
def __mul__(self, other):
x = self.x * other
y = self.y * other
new = Vector()
new.set_pos((x, y))
return new
моя проблема в том, что я не знаю, что есть что между числом и вектором. Если само количество, само.x вызывает ошибку. (Возможно, я ошибаюсь в этом вопросе:" другое " всегда число ?)
я нашел здесь : Python: переопределение умножения это я могу сделать. :
__rmul__ = __mul__
но как я могу это сделать в определении класса ?
что-то типа :
def __rmul__ = __mul__
3 ответов
self никогда не будет в __mul__() поскольку объект, к которому присоединен метод, не является числом, это вектор, и по определению это мультипликат.
other будет числом, если ваш объект умножается на число. Или это может быть что-то еще, например, другой вектор, который можно проверить и отрегулировать.
когда ваш объект является множителем,__rmul__() вызывается, если multiplicand не знает, как обрабатывать операция.
для обработки случая, в котором __mul__ и __rmul__ должен быть тот же метод, потому что операция коммутативна, вы можете просто выполнить назначение в своем определении класса.
class Vector(object):
def __mul__(self, other):
pass
__rmul__ = __mul__
Просто перечислите его как атрибут:
__rmul__ = __mul__
таким же образом вы создадите псевдоним функции в модуле; создание псевдонима метода в теле класса работает одинаково.
дело в том, что в Python вы можете сказать объектам, как умножить себя на вещи. Это значит, что
a * b
может означать "скажи a умножить само на b" или "сказать b умножить само на a". В коде это переводится как
a.__mul__(b)
или
b.__rmul__(a)