list.sorted()
Robert Brewer
fumanchu at amor.org
Sat Dec 6 19:59:54 EST 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