Доступ к статической переменной из статического метода

Я хочу получить статическую переменную из статического метода:

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

print Messenger.get_msg(Messenger)

Как это сделать без передачи grrrr методу? Это настоящий ООП?..

Все, что похоже на name или self.name, похоже, не работает:

NameError: global name 'name' is not defined

и

NameError: global name 'self' is not defined

Ответ 1

Используйте @classmethod вместо @staticmethod. Нашел его сразу после написания вопроса.

На многих языках (С++, Java и т.д.) "статические" и "классные" методы являются синонимами. Не в Python.

Ответ 2

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

Вы не можете использовать self.name, потому что self не определен. self - это соглашение об именах для первого параметра нестатических или неклассовых методов. Он указывает на объект, на который вы вызвали метод. Поскольку вы являетесь методом static, вам не нужен объект для его вызова.