On 14/10/12 13:34, Osemeka Osuagwu wrote:

I understand instance, static and class methods but I'm still
struggling with when and where they should be used.

You can pretty much ignore static methods, they were almost an
historic 'accident' superseded, in most cases, by class methods. The number of cases where a staticmethod is really needed is very low.

class methods you will rarely need but they are used when you want to do something to the entire class of objects. i.e. something that affects all instances both existing and future. Or they could be used where there are no instances (yet). Factory methods, instance selection
methods, modifying shared attributes, instance pooling, are all
examples. To give some kind of heuristic based on my personal usage, I use class methods in almost all my bigger projects. Such a project might have 20 or 30 (or more) classes. Out of that maybe 2 or 3 will have any class methods.

Instance methods are by far the most common. These are the things you want to do to a specific instance of the class. Changes to one instance have no effect on other instances of the same class.

In the code below, I can't seem to get around calling an instance
method (__reality_check()) from within a class method (update_grid()),

It's not a class method, you want to update a specific instance of a grid. update_grids() might be a class method if you wanted to, say, change the maximum buffer size used to store the grids, or cause all grids to display the word 'empty' instead of a blank. Of course to do that you would need access to all the instances to update their existing values so the constructor would need to store a reference to itself in the class somewhere (or maybe in a separate shared database). The class method would then iterate over all instances calling their instance method update_grid(). This is a common(*) class method pattern,
where a plural class method calls the singular instance methods
of all the instances.

(*) I say common, but of course class methods are not common
    so its a very relative term!

HTH

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to