When is it best to use a class in Python?

class, function, oop, python

Solution

Your example is rather simplified.

In a more complete example fighting wouldn't just display the current state - it would also modify that state. Your monster might get hurt and that would change its hit points and morale. This state has to be stored somewhere. If you use a class it would be natural to add instance variables to store this state.

Using only functions it would be more difficult to find a good place to store the state.

Problem

I'm new to python and programming in general, so would really appreciate any clarification on this point. For example, in the following code: ``` #Using a class class Monster(object): def __init__(self, level, damage, duration): print self self.level = level self.damage = damage self.duration = duration def fight(self): print self print "The monster's level is ", self.level print "The monster's damage is ", self.damage print "The attack duration is ", self.duration def sleep(self): print "The monster is tired and decides to rest." x = Monster(1, 2, 3) y = Monster(2, 3, 4) x.fight() y.fight() y.sleep() #just using a function def fight_func(level, damage, duration): print "The monster's level is ", level print "The monster's damage is ", damage print "The attack duration is ", duration fight_func(1, 2, 3) fight_func(5,3,4) ``` The pure function version seems cleaner and gives the same result. Is the primary value of classes that you can create and call a number of methods on an object, e.g. fight or sleep?

Original source