On Jan 21, 7:43 am, Martin Drautzburg <martin.drautzb...@web.de> wrote: > Hello all, > > When passing parameters to a function, you sometimes need a paramter > which can only assume certain values, e.g. > > def move (direction): > ... > If direction can only be "up", "down", "left" or "right", you can solve > this by passing strings, but this is not quite to the point: > > - you could pass invalid strings easily > - you need to quote thigs, which is a nuisance > - the parameter IS REALLY NOT A STRING, but a direction > > Alternatively you could export such symbols, so when you "import *" you > have them available in the caller's namespace. But that forces you > to "import *" which pollutes your namespace. > > What I am really looking for is a way > > - to be able to call move(up) > - having the "up" symbol only in the context of the function call > > So it should look something like this > > ... magic, magic ... > move(up) > ... unmagic, unmagic ... > print up > > This should complain that "up" is not defined during the "print" call, > but not when move() is called. And of course there should be as little > magic as possible. > > Any way to achieve this?
class Direction(object): pass def is_direction(d): return type(d)==Direction up = Direction() down = Direction() left = Direction() right = Direction() Now you can do your move(up), print up, etc. You can also check a valid direction was passed in by calling is_direction. 'Course, you can extend this so it does something a little more useful: class Direction(object): def __init__(self, vx=0, vy=0): self.vx = vx self.vy = vy up = Direction(0, -1) down = Direction(0, 1) left = Direction(-1, 0) right = Direction(1, 0) def move(direction): spaceship.x += direction.vx spaceship.y += direction.vy Iain -- http://mail.python.org/mailman/listinfo/python-list