[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] When to use a constant



Hi,

 Right, if you're looking for abstraction use a class,
 if you just *want it to work*, use arrays.

 suggestion:

 If you use a class, try to define operations on it,
 such as __mul__ and __add__, so that you effectively
 *do not have* to access self[0] and self[1] anymore

 AFAIC, I would keep the array and no constants
 for as long as my 'Velocity' objects do not require
 member methods.

  S.

 
On Tue, May 11, 2004 at 07:13:58AM -0700, swt wrote:
> You could use Object.X and Object.Y, and (for velocity) Object.XVelocity
> or Object.DX.  If you use a little __getattr__ and __setattr__ magic,
> you can still store the actual position and velocity components in your
> arrays.  
> 
> (If it were me, I think I would just use Object.X and so on directly,
> unless I could save a *lot* of duplicate code by looping over the two
> axes)
> 
> The code could look like this:
> 
> class Thingy:
>     def __init__(self, Position):
>         self.Position = Position
>     def __getattr__(self, Name):
>         if Name=="X":
>             return self.Position[0]
>         elif Name=="Y":
>             return self.Position[1]
>         else:
>             return self.__dict__[Name]
>     def __setattr__(self, Name, Value):
>         if Name=="X":
>             self.Position[0] = Value
>         elif Name=="Y":
>             self.Position[1] = Value
>         else:
>             self.__dict__[Name] = Value
> 
> Dog = Thingy([10,4])
> print Dog.X # prints 10
> Dog.Y = 20
> print Dog.Position # prints [10, 20]
> 
> 
> > -----Original Message-----
> > From: owner-pygame-users@seul.org 
> > [mailto:owner-pygame-users@seul.org] On Behalf Of Jon Doda
> > Sent: Tuesday, May 11, 2004 7:03 AM
> > To: pygame-users@seul.org
> > Subject: [pygame] When to use a constant
> > 
> > 
> > I'm working on a simple 2D physical simulation.  The various 
> > simulation 
> > objects have position and velocity attributes that store the x and y 
> > components in a list.  So, to get the y component of velocity 
> > for some 
> > object you do something like "sim_object.velocity[1]".
> > 
> > Recently I've been tempted to define constants for the index 
> > values of 
> > the lists, so I'd have X = 0, and Y = 1, and the code from 
> > above would 
> > be "sim_object.velocity[Y]".  It would make reading the 
> > simulation code 
> > somewhat easier (no more converting 0 to x and y to 1 in my 
> > head) but it 
> > would add a level of indirection, which could be confusing.
> > 
> > So, the question is, would using constants in this way be a 
> > reasonable 
> > thing to do, or is it bad practice?
> > 
> > -- 
> > Jon Doda
> > 

-- 
http://www.migniot.com - sebastien@migniot.com
"Le sage devrait faire bien plus attention au bout du doigt."