I have a similar problem. Here's what I do:
.def new_robot_named(name,indict=globals()): . execstr = name + " = robot('" + name + "')" . exec(execstr,indict)
.class robot(object): . def __init__(self,name): . self.name = name
. def sayhi(self): . print "Hi! I'm %s!" % self.name
.if __name__=="__main__": . new_robot_named('Bert') . new_robot_named('Ernie') . Ernie.sayhi() . Bert.sayhi()
If you're changing the syntax from alex = CreateRobot() to new_robot_named('Alex') I don't see what you gain from using exec...
py> class robot(object): ... def __init__(self,name): ... self.name = name ... def sayhi(self): ... print "Hi! I'm %s!" % self.name ... py> def new_robot_named(name, indict=globals()): ... indict[name] = robot(name) ... py> new_robot_named('Bert') py> new_robot_named('Ernie') py> Ernie.sayhi() Hi! I'm Ernie! py> Bert.sayhi() Hi! I'm Bert! py> import new py> temp = new.module('temp') py> new_robot_named('Alex', temp.__dict__) py> temp.Alex.sayhi() Hi! I'm Alex!
That said, I do think a 'new_robot_named' function is probably a better approach than trying to change the meaning of Python's assignment statement...
Steve -- http://mail.python.org/mailman/listinfo/python-list