André Roberge wrote: > Scott David Daniels wrote: > >> André Roberge wrote: >> >>> ... Each time I refresh the screen, I could >>> force that call, then check to see if Evil has been >>> destroyed by Python, which would give me the information >>> I need to destroy Evil_twin behind the scene myself - >>> which is what I am really after. >> >> What might work is to keep a weakref to Evil in Evil_twin. >> Upon refresh, you could check if the weakref has gone stale. >> Is that good enough? > > ... Try something like this: ++ import weakref > class UsedRobot(object): -- def __init__(self, ..., parent=Visible_world()): ++ def __init__(self, ..., jeckyll=None, parent=Visible_world()): ++ # need to know if we are good or evil. > # Visible_world is a Singleton - see Python cookbook --> true_robot = parent.addOneRobot(...) # <---Evil_twin created > self.robot = parent.robot_dict[true_robot.name] > self.name = true_robot.name > self.program = rur_program() # Singleton > self.parent = parent > self.parent.object_dict[self.name] = True # <--- new trick > self.program.wait_update_refresh(self.robot, self.name) ++ if jeckyll is None: ++ # Making a good twin. Make an evil partner ++ twin = parent.addOneRobot(..., jeckyll=self) ++ self.twin = lambda: return twin # match weakref interface ++ # hold a ref to the evil twin, so it will be alive ++ else: ++ # Making an evil twin. Make a weak ref to the good ++ twin = parent.addOneRobot(..., jeckyll=self, ...) ++ self.twin = weakref.ref(jeckyll) --> def __del__(self): --> self.parent.object_dict[self.name] = False ...
Somewhere else when deciding to draw a particular robot: ... robot = whatever ... --> <draw robot> ++ if robot.twin() is None: ++ # This must be an evil twin with a dead good twin ++ <avoid drawing robot> ++ else: ++ # this is either a good twin or ++ <draw robot> ... --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list