1class Vec: 2 """ A simple vector class 3 4 Instances of the Vec class can be constructed from numbers 5 6 >>> a = Vec(1, 2, 3) 7 >>> b = Vec(3, 2, 1) 8 9 added 10 >>> a + b 11 Vec(4, 4, 4) 12 13 subtracted 14 >>> a - b 15 Vec(-2, 0, 2) 16 17 and multiplied by a scalar on the left 18 >>> 3.0 * a 19 Vec(3.0, 6.0, 9.0) 20 21 or on the right 22 >>> a * 3.0 23 Vec(3.0, 6.0, 9.0) 24 """ 25 def __init__(self, *v): 26 self.v = list(v) 27 28 @classmethod 29 def fromlist(cls, v): 30 if not isinstance(v, list): 31 raise TypeError 32 inst = cls() 33 inst.v = v 34 return inst 35 36 def __repr__(self): 37 args = ', '.join(repr(x) for x in self.v) 38 return 'Vec({0})'.format(args) 39 40 def __len__(self): 41 return len(self.v) 42 43 def __getitem__(self, i): 44 return self.v[i] 45 46 def __add__(self, other): 47 # Element-wise addition 48 v = [x + y for x, y in zip(self.v, other.v)] 49 return Vec.fromlist(v) 50 51 def __sub__(self, other): 52 # Element-wise subtraction 53 v = [x - y for x, y in zip(self.v, other.v)] 54 return Vec.fromlist(v) 55 56 def __mul__(self, scalar): 57 # Multiply by scalar 58 v = [x * scalar for x in self.v] 59 return Vec.fromlist(v) 60 61 __rmul__ = __mul__ 62 63 64def test(): 65 import doctest 66 doctest.testmod() 67 68test() 69