2012-04-09 71 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' 
相关问题