21

我想从静态方法访问静态变量:

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

print Messenger.get_msg(Messenger)

如何在不传递grrrr给方法的情况下做到这一点?这是真正的OOP吗?...

任何类似nameself.name似乎不起作用的东西:

NameError: global name 'name' is not defined

NameError: global name 'self' is not defined
4

2 回答 2

24

使用@classmethod而不是@staticmethod. 刚写完问题就找到了。

在许多语言(C++、Java 等)中,“静态”和“类”方法是同义词。不是在 Python 中。

于 2012-06-27T19:38:48.663 回答
16
def get_msg():
    return "hello " + Messenger.name

你不能使用 self.name 因为 self 没有定义。self 是非静态或非类方法方法的第一个参数的命名约定。它指向您调用该方法的对象。由于您的方法是静态的,因此您不需要对象来调用它。

于 2012-06-27T19:46:30.370 回答