Accessing class variables in staticmethods.

Sam free.condiments at gmail.com
Sun Jan 21 16:00:13 EST 2007


On 21 Jan 2007 12:49:17 -0800, Ramashish Baranwal
<ramashish.lists at gmail.com> wrote:
> class Base:
>     staticvar = 'Base'
>
>     @staticmethod
>     def printname():
>         # this doesn't work
>         # print staticvar
>         # this does work but derived classes wouldn't behave as I want
>         print Base.staticvar
>
> class Derived(Base):
>     staticvar = 'Derived'
>
> Base.printname() # should print 'Base'
> Derived.printname() # should print 'Derived'
>
> Any idea on how to go about this? Also from a staticmethod how can I
> find out other attributes of the class (not objects)? Do static methods
> get some classinfo via some implicit argument(s)?

No, staticmethods get told nothing about the class they're being
defined in. What you want is a classmethod, which gets passed the
class to work with.

Using classmethods, your code becomes:

#untested, bear in mind
class Base:
    staticvar = 'Base'

    @classmethod
    def printname(cls):
        print cls.staticvar

class Derived(Base):
    staticvar = 'Derived'

Base.printname() #prints 'Base'
Derived.printname() #prints 'Derived'

Incidentally, you can also use cls.__name__ for this purpose, but I
guess that your actual motivation for this is more complicated than
class names.



More information about the Python-list mailing list