我试图从一个类中声明一个全局变量,像这样:如何从类内声明一个全局变量?
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