2012-04-09 66 views
8

我試圖從一個類中聲明一個全局變量,像這樣:如何從類內聲明一個全局變量?

class myclass: 
    global myvar = 'something' 

我需要它給類以外的訪問,但是我不希望有聲明它的類文件外。我的問題是,這可能嗎?如果是這樣,語法是什麼?

+0

爲什麼不這樣做是這樣的:'全球MYVAR;'和下一行,改變它呢? – hjpotter92 2012-04-09 16:30:47

+1

看起來像你想要的東西不同於你問的東西 – 0xc0de 2012-04-09 16:55:57

+0

FJ回答了問題,所以我+1了,zigg得到了意圖(不必一遍又一遍地輸出myclass.var),它應該是更好的做法,所以我將把未來的人們從搜索到他的回答中提出同樣的問題。 – Adam 2012-04-09 17:05:09

回答

12

在你的問題,你指定「主文件外」。如果你沒有意思「之類的外部」,那麼這將工作定義模塊級變量:

myvar = 'something' 

class myclass: 
    pass 

然後你就可以做,假設類和變量定義是一個叫mymodule模塊:

如果你想剛剛從anoth訪問它的簡寫

from mymodule import myvar 

print myvar 

import mymodule 

myinstance = myclass() 
print mymodule.myvar 

此外,在回答您的評論@ phihag的回答,您可以訪問MYVAR不合格的,像這樣呃文件,同時還定義它的類:

class myclass: 
    myvar = 'something' 

然後,在該文件中,你需要訪問它,分配在本地命名空間的引用:

myvar = myclass.myvar 

print myvar 
+0

對不起,我的意思是在課外。調用該類的文件。 – Adam 2012-04-09 16:35:13

+0

請參閱編輯。最好保持對命名空間的控制,只引入你所需要的。否則,你最終可能會提到你不打算的東西,因爲你的程序變得更大...... – zigg 2012-04-09 16:40:04

3

可以將屬性簡單地分配給類:

class myclass(object): 
    myvar = 'something' 

# alternatively 
myclass.myvar = 'else' 

# somewhere else ... 
print(myclass.myvar) 
+0

我理解這個作品,我的問題是如果設置一個全局變量可以避免輸入「myclass」。很多。可能嗎?謝謝。 – Adam 2012-04-09 16:32:38

+2

@fryy可能在理論上,但一個非常糟糕的想法和你的理由不** **證明它。這是做到這一點的正確方法。 – delnan 2012-04-09 16:36:23

+2

@fryy通常在python的任何地方使用「global」語句表示設計不好(儘管並非總是如此,所以它存在)。通常,來自其他語言的人將其視爲與某些以前的語言習慣相似的東西。 – 2012-04-09 16:39:07

3

你真的應該重新考慮是否不是這是非常必要的,它似乎是一個奇怪的方式來構建你的程序,你應該更正確地使用phihag的方法。

如果您決定還是要做到這一點,這裏是如何,您可以:

>>> class myclass(object): 
...  global myvar 
...  myvar = 'something' 
... 
>>> myvar 
'something' 
+0

謝謝,我將使用「from mymodule import myvar」zigg建議。感謝您回答這個問題。 – Adam 2012-04-09 16:41:02

3

要回答你的問題

global s 
s = 5 

會做到這一點。您將遇到問題,具體取決於您在課程中的位置。遠離功能來獲得你想要的行爲。

3

你可以這樣做

# I don't like this hackish way :-S 
# Want to declare hackish_global_var = 'something' as global 
global_var = globals() 
global_var['hackish_global_var'] = 'something' 
相關問題