T
Thomas Philips
I have a question about deleting objects. My game has two classes,
Player and Alien, essentially identical, instances of which can shoot
at each other. Player is described below
class Player(object):
#Class attributes for class Player
n=0 #n is the number of players
#Private methods for class Player
def __init__(self,name):
self.name = name
self.strength = 100
Player.n +=1
def __del__(self):
Player.n -=1
print "I guess I lost this battle"
#Public methods for class Player
def blast(self,enemy,energy):
enemy.hit(energy)
def hit(self,energy):
self.strength -= energy
if(self.strength <= 50):
self.__del__()
I instantiate one instance of each class:
Hero = Player("Me")
Villain = Alien("Not Me")
If Hero hits Villain with
Hero.blast(Villain, 100),
Villain dies and executes its destructor (__del__). The game then
ends. However,
1. When I execute the program in IDLE, IT FINISHES BY EXECUTING THE
DESTRUCTOR FOR BOTH HERO AND VILLAIN. How can this be? As one of the
two objects was destroyed prior to the end of the game, how can it be
re-destroyed when the program ends?
2. After Hero hits Villain with an energy of 100, Villain executes its
destructor, but I find I can then type
Villain.blast(Hero,100)
and have the alien (whose demise had me gloating) blast me right back!
Why is it that the blast() method works for an object whose destructor
has been executed?
Thomas Philips
Post a follow-up to this message
Player and Alien, essentially identical, instances of which can shoot
at each other. Player is described below
class Player(object):
#Class attributes for class Player
n=0 #n is the number of players
#Private methods for class Player
def __init__(self,name):
self.name = name
self.strength = 100
Player.n +=1
def __del__(self):
Player.n -=1
print "I guess I lost this battle"
#Public methods for class Player
def blast(self,enemy,energy):
enemy.hit(energy)
def hit(self,energy):
self.strength -= energy
if(self.strength <= 50):
self.__del__()
I instantiate one instance of each class:
Hero = Player("Me")
Villain = Alien("Not Me")
If Hero hits Villain with
Hero.blast(Villain, 100),
Villain dies and executes its destructor (__del__). The game then
ends. However,
1. When I execute the program in IDLE, IT FINISHES BY EXECUTING THE
DESTRUCTOR FOR BOTH HERO AND VILLAIN. How can this be? As one of the
two objects was destroyed prior to the end of the game, how can it be
re-destroyed when the program ends?
2. After Hero hits Villain with an energy of 100, Villain executes its
destructor, but I find I can then type
Villain.blast(Hero,100)
and have the alien (whose demise had me gloating) blast me right back!
Why is it that the blast() method works for an object whose destructor
has been executed?
Thomas Philips
Post a follow-up to this message