【问题标题】:Access static variable from static method从静态方法访问静态变量
【发布时间】:2012-06-29 07:53:46
【问题描述】:

我想通过静态方法访问静态变量:

#!/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

【问题讨论】:

    标签: python oop static-methods static-variables


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      def get_msg():
          return "hello " + Messenger.name
      

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

      【讨论】:

      • 所以要访问类的静态方法中的静态变量,我必须将类名添加到我正在访问的静态变量前面,就像您在答案中显示的那样?
      • @RaynerDaCruz 如果您在@staticmethod 中访问它,那么是的,您需要为类名添加前缀。如果它是@classmethod,那么您也可以使用您的方法的cls 参数。差异在这里得到了很好的描述:medium.com/school-of-code/…
      猜你喜欢
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2014-04-01
      • 2017-01-13
      • 2012-07-17
      • 2016-11-10
      • 2013-01-31
      相关资源
      最近更新 更多