nessus at mit.edu
Sun Dec 7 04:19:53 CET 2003
"Robert Brewer" <fumanchu at amor.org> writes:
> Douglas Alan wrote:
> Ah, thanks. By "more cumbersome" are you talking simply about having to
> add .__class__ as in:
> ...or is there more to it?
I think that should be about it, but I don't really like doing that.
I find it a bit ugly, and if at some point I were to decide that there
is some reason that I do want to use some instance data, then I have
to change my code in more places.
On the other hand, I'm certainly not going to lose any sleep over the
> 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.
I'm not sure I understand what you have in mind. isLegalFieldTag()
takes a string as an argument, and determines whether that string is a
legal "tag" token when parsing textual representations of instances of
that class. In C++, the code had to look something like this (when
translated into Python):
if str == "foo" or str == "bar" or str == "baz": return True
else: return False
isLegalTag = staticmethod(isLegalTag)
def vIsLegalTag(self, str): return Foo.isLegalTag(str)
f = Foo()
But in Python, I can get rid of vIsLegalTag() altogether, and just do:
If Python were changed as you suggest (modulo "classmethod" vs
"staticmethod") I would have to change the above code. The obvious
way, to me, would be to replace "f." with "f.__class__.".
Now what is the alternative to this that you would do?
> 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.
I'm not sure what your reason is for making a big distinction here
between class methods and static methods. To me, making a big
distinction here would make Python less regular, and consequently more
difficult to learn and understand. Also, it means that if I were to
decide to change isLegalTag from a static method to a class method, I
would have to change more code.
More information about the Python-list