On Fri, 2009-08-28 at 18:03 +0100, Alan Gauld wrote: > "Mac Ryan" <[email protected]> wrote > > > I am not sure I understood the difference between staticmethod end > > classmethod, though, even if I can guess it has to do with subclassing, > > I think it is mainly historical. staticmethod came first (I think) and > classmethod > was an improvement a couple of versions later. I think classmethod is the > preferred choice nowadays. > > > Also, what is the advantage of using a method at class level rather than > > using it at object instance > > There are two common cases: > > 1) You want to do something at the class level rather than instance > level - such as find all instances, or keep a count of all instances. > Or you may have a method or variable that affects all instances > simultaneously - perhaps activates or disables all network connections > say. > > 2) You want somethig that can be done without creating an instance, > or at least does not depend on whether any instances exist yet. This > is very common in Java which doesn't support standalone functions > but is not needed so much in Python because a module function is > usually a better option. > > You can also use it to provide meta-class programming features > and other tricks, but frankly thats usually being too clever for your > own good! :-) > > HTH,
Thank you Alan, that totally answer my question about classmethods. :) What is still unclear to me, is what the staticmethods are for, though: since the reference to the object instance or to the class object are stripped away from the call, I wonder why not to use a module function instead. The only difference I can think of between the two (static method and module function) is that the namespaces they "live in" are different (mymodule.function vs. mymodule.myclass.function)... but I suspect there must be a better and more important design reason to have them implemented in the core... Many thanks in advance for your help, Mac. _______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
