automatically assigning names to indexes

George Sakkis gsakkis at rutgers.edu
Tue Jul 12 07:53:31 EDT 2005


<simonwittber at gmail.com> wrote:

> I know its been done before, but I'm hacking away on a simple Vector
> class.
>
> class Vector(tuple):
>     def __add__(self, b):
>         return Vector([x+y for x,y in zip(self, b)])
>     def __sub__(self, b):
>         return Vector([x-y for x,y in zip(self, b)])
>     def __div__(self, b):
>         return Vector([x/b for x in self])
>     def __mul__(self, b):
>         return Vector([x*b for x in self])
>
> I like it, because it is simple, and can work with vectors of any
> size...
>
> However, I'd like to add attribute access (magically), so I can do
> this:
>
> v = Vector((1,2,3))
> print v.x
> print v.y
> print v.z
>
> as well as:
>
> print v[0]
> print v[1]
> print v[2]
>
> Has anyone got any ideas on how this might be done?

And what should happen for vectors of size != 3 ? I don't think that a
general purpose vector class should allow it; a Vector3D subclass would
be more natural for this.

George




More information about the Python-list mailing list