diff options
author | Georg Brandl <georg@python.org> | 2010-07-05 20:13:41 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2010-07-05 20:13:41 (GMT) |
commit | 5ada7c7315f34eee5664f4daf44ff75eba414fe3 (patch) | |
tree | 83d4ff7a5e4985f1b1181215eb188d97b5c73fd4 /Demo/classes | |
parent | dc00a2a249cf616c784bf721c6ecc1cdb8778a64 (diff) | |
download | cpython-5ada7c7315f34eee5664f4daf44ff75eba414fe3.zip cpython-5ada7c7315f34eee5664f4daf44ff75eba414fe3.tar.gz cpython-5ada7c7315f34eee5664f4daf44ff75eba414fe3.tar.bz2 |
Update Vec class constructor, remove indirection via function, use operator module.
Diffstat (limited to 'Demo/classes')
-rw-r--r-- | Demo/classes/Vec.py | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/Demo/classes/Vec.py b/Demo/classes/Vec.py index edb3147..7e3e3ae 100644 --- a/Demo/classes/Vec.py +++ b/Demo/classes/Vec.py @@ -1,8 +1,6 @@ # A simple vector class - -def vec(*v): - return Vec(*v) +import operator class Vec: @@ -10,14 +8,16 @@ class Vec: def __init__(self, *v): self.v = list(v) - def fromlist(self, v): + @classmethod + def fromlist(cls, v): if not isinstance(v, list): raise TypeError - self.v = v[:] - return self + inst = cls() + inst.v = v + return inst def __repr__(self): - return 'vec(' + repr(self.v)[1:-1] + ')' + return 'Vec(' + repr(self.v)[1:-1] + ')' def __len__(self): return len(self.v) @@ -27,24 +27,24 @@ class Vec: def __add__(self, other): # Element-wise addition - v = list(map(lambda x, y: x+y, self, other)) - return Vec().fromlist(v) + v = list(map(operator.add, self, other)) + return Vec.fromlist(v) def __sub__(self, other): # Element-wise subtraction - v = list(map(lambda x, y: x-y, self, other)) - return Vec().fromlist(v) + v = list(map(operator.sub, self, other)) + return Vec.fromlist(v) def __mul__(self, scalar): # Multiply by scalar v = [x*scalar for x in self.v] - return Vec().fromlist(v) + return Vec.fromlist(v) def test(): - a = vec(1, 2, 3) - b = vec(3, 2, 1) + a = Vec(1, 2, 3) + b = Vec(3, 2, 1) print(a) print(b) print(a+b) |