我試圖從一個類中聲明一個全局變量,像這樣:如何從類內聲明一個全局變量?
class myclass:
global myvar = 'something'
我需要它給類以外的訪問,但是我不希望有聲明它的類文件外。我的問題是,這可能嗎?如果是這樣,語法是什麼?
我試圖從一個類中聲明一個全局變量,像這樣:如何從類內聲明一個全局變量?
class myclass:
global myvar = 'something'
我需要它給類以外的訪問,但是我不希望有聲明它的類文件外。我的問題是,這可能嗎?如果是這樣,語法是什麼?
在你的問題,你指定「主文件外」。如果你沒有意思「之類的外部」,那麼這將工作定義模塊級變量:
myvar = 'something'
class myclass:
pass
然後你就可以做,假設類和變量定義是一個叫mymodule
模塊:
from mymodule import myvar
print myvar
:
import mymodule
myinstance = myclass()
print mymodule.myvar
此外,在回答您的評論@ phihag的回答,您可以訪問MYVAR不合格的,像這樣呃文件,同時還定義它的類:
class myclass:
myvar = 'something'
然後,在該文件中,你需要訪問它,分配在本地命名空間的引用:
myvar = myclass.myvar
print myvar
可以將屬性簡單地分配給類:
class myclass(object):
myvar = 'something'
# alternatively
myclass.myvar = 'else'
# somewhere else ...
print(myclass.myvar)
你真的應該重新考慮是否不是這是非常必要的,它似乎是一個奇怪的方式來構建你的程序,你應該更正確地使用phihag的方法。
如果您決定還是要做到這一點,這裏是如何,您可以:
>>> class myclass(object):
... global myvar
... myvar = 'something'
...
>>> myvar
'something'
謝謝,我將使用「from mymodule import myvar」zigg建議。感謝您回答這個問題。 – Adam 2012-04-09 16:41:02
要回答你的問題
global s
s = 5
會做到這一點。您將遇到問題,具體取決於您在課程中的位置。遠離功能來獲得你想要的行爲。
你可以這樣做
# 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'
爲什麼不這樣做是這樣的:'全球MYVAR;'和下一行,改變它呢? – hjpotter92 2012-04-09 16:30:47
看起來像你想要的東西不同於你問的東西 – 0xc0de 2012-04-09 16:55:57
FJ回答了問題,所以我+1了,zigg得到了意圖(不必一遍又一遍地輸出myclass.var),它應該是更好的做法,所以我將把未來的人們從搜索到他的回答中提出同樣的問題。 – Adam 2012-04-09 17:05:09