John, I agree with you and I also think the definition given on the official python site is somewhat confusing, at least for an engineer like myself. But I'll take a stab at explaning it using what I know thus far.
I think to understand what a class method is you have to first understand what a class variable is. Take this code snippet for example. class foo(object): x=10 def __init__(self): self.x=20 In this example if you create an instance of foo and call it f. You can access the instance attribute x by using f.x or you can access the class variable using the notation foo.x. These two will give you two different results. Now lets do something a bit more interesting. Say you have the following snippet. class foo(object): x=0 def __init__(self): self.x=10 foo.x+=1 >>>f=foo() >>>g=goo() >>>f.x 10 >>>g.x 10 >>>foo.x 2 What happened here is that the class variable foo.x is used to keep a count of the total number of instances created. So we see that a class variable can be looked at as what "connects" the two instances in a way, so that data can be shared between instances of the same class. This defintion may very well only apply to this case, but I think the mechanics is fundamentally the same. Keeping this in mind, lets make the jump to class methods. When an instance of a class is created, the methods are just functions that "work on" the attributes (the variables). Similarly, a class method is a method that works on a class variable. For example, class foo(object): x=10 def __init__(self): self.x=20 @classmethod def change(self): self.x=15 >>>f=foo() >>>f.x 20 >>>foo.x 10 >>>f.change() >>>f.x 20 >>>foo.x 15 So this is my explanation for what a classmethod is. Hope it helps. Good luck. Denis On Mon, Aug 23, 2010 at 2:24 AM, John Nagle <na...@animats.com> wrote: > On 8/22/2010 9:16 PM, James Mills wrote: > >> On Mon, Aug 23, 2010 at 1:53 PM, Paulo da Silva >> >> <psdasilva.nos...@netcabonospam.pt> wrote: >> >>> I did it before posting ... >>> >>> The "explanation" is not very clear. It is more like "how to use it". >>> >> >> Without going into the semantics of languages basically the >> differences are quite clear: >> >> @classmethod is a decorator that warps a function with >> passes the class as it's first argument. >> >> @staticmethod (much like C++/Java) is also a decorator that >> wraps a function but does not pass a class or instance as >> it's first argument. >> > > That reads like something the C++ standards revision committee > would dream up as they add unnecessary template gimmicks to the > language. > > John Nagle > > -- > http://mail.python.org/mailman/listinfo/python-list >
-- http://mail.python.org/mailman/listinfo/python-list