Форум сайта python.su
0
class Vector: def __init__(self, x=0, y=0): self.x = x self.y = y pass def __repr__(self): return '({}; {})'.format(self.x, self.y) def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) def __sub__(self, other): return Vector(self.x - other.x, self.y - other.y) def __mul__(self, other): if isinstance(other, int) or isinstance(other, float): return Vector(other * self.x, other * self.y) elif isinstance(other, Vector): return self.x * other.x + self.y * other.y def mult(self, other): return Vector(other * self.x, other * self.y) def __abs__(self): return hypot(self.x, self.y)
Отредактировано Alex9912 (Март 30, 2019 17:55:46)
Офлайн
857
Alex9912В каких “dunder'ах” ?
разных классов в dunder'ах
Alex9912Какая проблема?
я понимаю почему эта проблема присутствует
Офлайн
0
я о том, что вектор на число не умножается
TypeError: unsupported operand type(s) for *: ‘int’ and ‘Vector’
я об этом
Офлайн
857
>>> class Vector: ... def __init__(self, x=0, y=0): ... self.x = x ... self.y = y ... def __repr__(self): ... return '({}; {})'.format(self.x, self.y) ... def __add__(self, other): ... return Vector(self.x + other.x, self.y + other.y) ... def __sub__(self, other): ... return Vector(self.x - other.x, self.y - other.y) ... def __mul__(self, other): ... if isinstance(other, (int, float)): ... return Vector(other * self.x, other * self.y) ... elif isinstance(other, Vector): ... return self.x * other.x + self.y * other.y ... else: ... raise ValueError('unknown type: {}'.format(type(other))) ... def __rmul__(self, other): ... if isinstance(other, (int, float)): ... return Vector(other * self.x, other * self.y) ... elif isinstance(other, Vector): ... return self.x * other.x + self.y * other.y ... else: ... raise ValueError('unknown type: {}'.format(type(other))) ... def __abs__(self): ... return (self.x ** 2 + self.y ** 2) ** 0.5 ... >>> v1 = Vector(1, 2) >>> v2 = Vector(3, 4) >>> >>> v1 + v2 (4; 6) >>> >>> v1 - v2 (-2; -2) >>> >>> v1 * 2 (2; 4) >>> >>> 2 * v1 (2; 4) >>> >>> v1 * v2 11 >>> >>> abs(v1) 2.23606797749979 >>>
Отредактировано py.user.next (Апрель 6, 2019 13:17:46)
Офлайн
0
спасибо!
Офлайн