list.sorted()

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


Douglas Alan wrote:
> "Robert Brewer" <fumanchu at amor.org> 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:

    anObject.__class__.foo()

...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):
            return self.legal

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
MIS
Amor Ministries
fumanchu at amor.org





More information about the Python-list mailing list