Deleting objects

T

Thomas Philips

I'm teaching myself OOP using Michael Dawson's "Python Programming For
The Absolute Beginner" and 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, 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?

Thomas Philips
 
M

Michael Hudson

(e-mail address removed) (Thomas Philips) writes:

[snip]
Villain dies and executes its destructor (__del__). The game then
ends. However, when I execute the program in IDLE, IT FINISHES BY
EXECUTING THE DESTRUCTOR FOR BOTH HERO AND VILLAIN.

Err, __del__ isn't a destructor, it's a finalizer. It's called by the
Python runtime when it has determined that the object is garbage,
which is usually immediately after the last reference to it is
dropped.

Cheers,
mwh
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,073
Latest member
DarinCeden

Latest Threads

Top