Определить псевдонимы методов в 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)