| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/usr/bin/env python3
- """
- A demonstration of classes and their special methods in Python.
- """
- class Vec:
- """A simple vector class.
- Instances of the Vec class can be constructed from numbers
- >>> a = Vec(1, 2, 3)
- >>> b = Vec(3, 2, 1)
- added
- >>> a + b
- Vec(4, 4, 4)
- subtracted
- >>> a - b
- Vec(-2, 0, 2)
- and multiplied by a scalar on the left
- >>> 3.0 * a
- Vec(3.0, 6.0, 9.0)
- or on the right
- >>> a * 3.0
- Vec(3.0, 6.0, 9.0)
- """
- def __init__(self, *v):
- self.v = list(v)
- @classmethod
- def fromlist(cls, v):
- if not isinstance(v, list):
- raise TypeError
- inst = cls()
- inst.v = v
- return inst
- def __repr__(self):
- args = ', '.join(repr(x) for x in self.v)
- return 'Vec({})'.format(args)
- def __len__(self):
- return len(self.v)
- def __getitem__(self, i):
- return self.v[i]
- def __add__(self, other):
- # Element-wise addition
- v = [x + y for x, y in zip(self.v, other.v)]
- return Vec.fromlist(v)
- def __sub__(self, other):
- # Element-wise subtraction
- v = [x - y for x, y in zip(self.v, other.v)]
- return Vec.fromlist(v)
- def __mul__(self, scalar):
- # Multiply by scalar
- v = [x * scalar for x in self.v]
- return Vec.fromlist(v)
- __rmul__ = __mul__
- def test():
- import doctest
- doctest.testmod()
- test()
|