Так что я возился с написанием векторного класса, когда обнаружил этот интересный факт.
>>> e = int(3)
>>> e.__mul__(3.0)
NotImplemented
Может кто-нибудь объяснить, почему это так и как впоследствии исправить мой векторный класс?
class Vector(tuple):
'''A vector representation.'''
def __init__(self, iterable):
super(Vector, self).__init__(iterable)
def __add__(self, other):
return Vector(map(operator.add, self, other))
def __sub__(self, other):
return Vector(map(operator.sub, self, other))
def __mul__(self, scalar):
return Vector(map(scalar.__mul__, self))
def __rmul__(self, scalar):
return Vector(map(scalar.__mul__, self))
def __div__(self, scalar):
return Vector(map(scalar.__rdiv__, self))
РЕДАКТИРОВАТЬ: Чтобы быть немного более ясным:
>>> a = Vector([10, 20])
>>> a
(10, 20)
>>> b = a / 2.0
>>> b
(5.0, 10.0)
>>> 2 * b
(NotImplemented, NotImplemented)