Ответ 1
Используйте @classmethod
вместо @staticmethod
. Нашел его сразу после написания вопроса.
На многих языках (С++, Java и т.д.) "статические" и "классные" методы являются синонимами. Не в Python.
Я хочу получить статическую переменную из статического метода:
#!/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
Используйте @classmethod
вместо @staticmethod
. Нашел его сразу после написания вопроса.
На многих языках (С++, Java и т.д.) "статические" и "классные" методы являются синонимами. Не в Python.
def get_msg():
return "hello " + Messenger.name
Вы не можете использовать self.name, потому что self не определен. self - это соглашение об именах для первого параметра нестатических или неклассовых методов. Он указывает на объект, на который вы вызвали метод. Поскольку вы являетесь методом static, вам не нужен объект для его вызова.