2012-06-27 15 views
12

Chcę uzyskać dostęp do zmiennej statycznej z metody statycznej:Dostęp zmienna statyczna z metodą statyczną

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

print Messenger.get_msg(Messenger) 

Jak to zrobić bez przechodzenia grrrr sposobu? Jest to prawdziwa OOP ..

czegoś podobnego name lub self.name nie wydaje pracy:

NameError: global name 'name' is not defined 

i

NameError: global name 'self' is not defined 

Odpowiedz

14

Zastosowanie @classmethod zamiast @staticmethod. Znalazłem go zaraz po napisaniu pytania.

W wielu językach (C++, Java itp.) Metody "statyczne" i "klasa" są synonimami. Not in Python.

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

Nie można użyć self.name, ponieważ self nie jest zdefiniowane. self jest konwencją nazewnictwa dla pierwszego parametru metod niestatycznych lub nieklasycznych. Wskazuje obiekt, na który nazwałaś metodę. Ponieważ jesteś metodą jest statyczna, nie potrzebujesz obiektu, aby go wywołać.