2012-06-27 146 views
12

我想從一個靜態方法訪問靜態變量:訪問靜態變量從靜態方法

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

回答

14

使用@classmethod,而不是@staticmethod。在寫完問題後才發現它。

在很多語言(C++,Java等)中,「靜態」和「類」方法是同義詞。 Not in Python.

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

您不能使用self.name,因爲self沒有定義。 self是非靜態或非類型方法的第一個參數的命名約定。它指向您調用該方法的對象。由於你的方法是靜態的,所以你不需要一個對象來調用它。