Robert Brewer fumanchu at
Sun Dec 7 01:59:54 CET 2003

Douglas Alan wrote:
> "Robert Brewer" <fumanchu at> writes:
> > I've been looking through my code and can't find a single case where
> > I declared a classmethod, then called it from an instance, as in the
> > above example. Are there any cases where this is useful?
> Yes, it is useful.  I don't know if I've made use of this feature yet
> in Python, but I do know that I was bent out of shape when I realized
> that C++ doesn't support "virtual static functions" (because I would
> have liked to use them.
> These functions are used in a parser that parses text representations
> of objects in the class hierarchy.  isLegalFieldTag() is used by the
> parser to hlep determine whether or not a token it has just read is a
> legal token.

For example, whether "hlep" is a legal token? ;)

> The reason why I wanted it to be a static function is
> that whether or not a token is legal does not depend on a particular
> instance -- only on the class of the instance.  On the other hand, in
> order to do the parsing, I do need to dispatch based on the class of a
> particular instance.
> I suppose, unlike in C++, in Python I could fetch the class of the
> instance, and then dispatch on that, but that might be a bit
> more cumbersome.

Ah, thanks. By "more cumbersome" are you talking simply about having to
add .__class__ as in:

...or is there more to it?

I would probably implement your example by making isLegalFieldTag a
plain ol' instance method. To take a trivial case:

    class Tag(object):
        legal = True
        def isLegalFieldTag(self):

If self hasn't defined "legal" then it is resolved via the class. I'm
sure your logic was more complex, but that's the route I tend to take.

Note that I'm not thinking about barring *all* class access from
instances, just those methods explicitly made 'classmethods', which
expect cls as a first parameter.

Robert Brewer
Amor Ministries
fumanchu at

More information about the Python-list mailing list