2012-06-27 14 views
12

Quiero tener acceso a una variable estática de un método estático:acceso variable estática del método estático

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

print Messenger.get_msg(Messenger) 

cómo hacerlo sin pasar grrrr a un método? ¿Es esta la verdadera programación orientada a objetos ..

algo como name o self.name no parece trabajar:?

NameError: global name 'name' is not defined 

y

NameError: global name 'self' is not defined 

Respuesta

14

Uso @classmethod en lugar de @staticmethod. Lo encontré justo después de escribir la pregunta.

En muchos idiomas (C++, Java, etc.) los métodos "estáticos" y "de clase" son sinónimos. Not in Python.

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

No puede utilizar self.name porque uno mismo no está definido. self es una convención de nomenclatura para el primer parámetro de métodos no estáticos o no de clase. Apunta al objeto sobre el que llamó al método. Como su método es estático, no necesita un objeto para invocarlo.

Cuestiones relacionadas