staticmethod() problems
Erik Max Francis
max at alcyone.com
Thu Jan 23 19:16:25 EST 2003
Aum wrote:
> Erik Max Francis wrote:
>
> > The very purpose of staticmethod is to create a method that can be
> > invoked from an instance or a class and won't know the difference,
> > or
> > care. In some sense, what you're trying to do is at odds with the
> > purpose of classmethod in the first place.
>
> Don't you mean 'staticmethod'?
Absolutely; that was a brainfart on my part, my apologies.
> One of the purposes of staticmethod, yes.
>
> But there's a real problem with staticmethod. Within a staticmethod
> function, I can't see any way to access other static attributes of the
> class - methods or attributes - without knowing the class' name.
That's not a "problem," that's really staticmethod's purpose. C++
(which you reference later) is no different; a C++ static member
function doesn't know anything about the class it's attached to. It's
just a function which is associated with a class, and can either be
called from a class (C::memberFunction()) or an instance
(c.memberFunction()).
> With this restriction, python's static method implementation falls
> short of
> that of C++ (I won't say j--- because I don't know j---). At least in
> C++,
> you can subclass a class with static methods, and within the subclass,
> the
> inherited methods can access other static attributes within the class,
> without having to explicitly specify the class.
That's true, but Python is not C++, nor is the reverse the case. C++
has more complex scoping than Python, which is why this is the case.
staticmethods are a case where the intent is to tie a function to a
class such that it is can be called.
If you really do want to access the class that the staticmethod is tied
to, then maybe a classmethod would be more apprporiate (this time my
mention of term is not a brainfart :-).
> Firstly, python excels at empowering the programmer, and removing a
> vast
> number of the restrictions which make other languages a total pain. So
> why
> *shouldn't* there be a way for a static method to know (if it wants
> to) if
> it's been invoked via the class or via an instance? And to determine
> the
> exact class or subclass from which it's been invoked?
The best answer I can give you is that, "Because that's not what
staticmethods were intended to be used for." If you want the function
to know the class it's associated with, then use a classmethod.
--
Erik Max Francis / max at alcyone.com / http://www.alcyone.com/max/
__ San Jose, CA, USA / 37 20 N 121 53 W / &tSftDotIotE
/ \ An undevout astronomer is mad.
\__/ Edward Young
Bosskey.net: Quake III Arena / http://www.bosskey.net/q3a/
A personal guide to Quake III Arena.
More information about the Python-list
mailing list