Static class methods

Alex Shindich alex at shindich.com
Mon Mar 5 04:17:52 CET 2001


That will indeed work. But it's plain ugly.
Thanks for sharing the trick though!
"Chris Tavares" <ctavares at develop.com> wrote in message
news:0bDo6.16804$7Y1.1656672 at newsread2.prod.itd.earthlink.net...
> Try this:
>
> >>> class Foo:
> ...     class FooMethods:
> ...             def foo1(self):
> ...                     print "FooMethods.foo1"
> ...     class_methods = FooMethods()
> ...
> >>> foo = Foo()
> >>> foo.class_methods.foo1()
> FooMethods.foo1
> >>> Foo.class_methods.foo1()
> FooMethods.foo1
> >>>
>
> -Chris
>
> "Alex Shindich" <alex at shindich.com> wrote in message
> news:rdzo6.154$gc4.80445 at news.pacbell.net...
> > Just out of my curiosity, have any of you ladies and gentlemen
experienced
> a
> > need for an equivalent of C++/Java static method?
> > Because I have, but it is impossible add them to Python classes -- all
> class
> > methods are treated as instance methods.
> > This is especially unfortunate given that local functions now work
> properly
> > thanks to PEP 227.
> > I was thinking that a new keyword "unbound" could be used to identify
> > functions that belong to a class but do not expect "self" as their first
> > attribute.
> > From outside the class "unbound" methods would be invoked by specifying
> the
> > class name -- Foo.my_static_method (). From within the class they would
> work
> > similar to local functions that are defined at the class level. The __
> trick
> > should work for the "unbound" methods as well to allow for creation of
> > private static methods.
> >
> > Examples:
> > >>>class Foo:
> >     """This is a sample class..."""
> >
> >     __myPrivateStaticVariable  = None
> >
> >     unbound getMyPrivateStaticVariable ():
> >         """getMyPrivateStaticVariable (obj) -> obj
> >
> >         This method returns the value stored in private static
variable...
> >         """
> >         return Foo.__myPrivateStaticVariable
> >
> >
> >     unbound modifyMyPrivateStaticVariable (obj):
> >         """modifyMyPrivateStaticVariable (obj) -> void
> >
> >         This method assigns obj to the private static variable...
> >         """
> >         Foo.__myPrivateStaticVariable = obj
> >
> > >>> type (Foo.modifyMyPrivateStaticVariable)
> > <type 'unbound method'>
> > >>> type (Foo.getMyPrivateStaticVariable ())
> > <type 'None'>
> > >>> Foo.modifyMyPrivateStaticVariable ("abc")
> > >>> Foo.getMyPrivateStaticVariable ()
> > "abc"
> > >>>
> >
> >
> >
> >
>
>
>





More information about the Python-list mailing list