Access static variable from static method

15,725

Solution 1

Use @classmethod instead of @staticmethod. Found it just after writing the question.

In many languages (C++, Java etc.) "static" and "class" methods are synonyms. Not in Python.

Solution 2

def get_msg():
    return "hello " + Messenger.name

You can't use self.name because self is not defined. self is a naming convention for the first parameter of non-static or non-classmethod methods. It points to the object on which you called the method. Since your method is static, you don't need an object to call it on.

Share:
15,725
Dmitry Isaev
Author by

Dmitry Isaev

Mobile App Developer at KPE

Updated on June 16, 2022

Comments

  • Dmitry Isaev
    Dmitry Isaev about 2 years

    I want to access a static variable from a static method:

    #!/usr/bin/env python
    class Messenger:
        name = "world"
        @staticmethod
        def get_msg(grrrr):
            return "hello " + grrrr.name
    
    print Messenger.get_msg(Messenger)
    

    How to do it without passing grrrr to a method? Is this the true OOP?..

    Anything like name or self.name seems not working:

    NameError: global name 'name' is not defined
    

    and

    NameError: global name 'self' is not defined
    
  • DaCruzR
    DaCruzR over 3 years
    So to access a static variable within a static method of the class, I have to prefix the class name to the static variable I am accessing, like you have shown in your answer?
  • Ioan Alexandru Cucu
    Ioan Alexandru Cucu over 3 years
    @RaynerDaCruz if you access it in a @staticmethod, then yes, you need to prefix the class name. If it's a @classmethod, then you can also use the cls argument of your method. Difference is well described here: medium.com/school-of-code/…