如何从类中声明全局变量?

时间:2012-04-09 16:28:23

标签: python class

我正在尝试从类中声明一个全局变量:

class myclass:
    global myvar = 'something'

我需要在课外访问它,但我不想在类文件之外声明它。我的问题是,这可能吗?如果是这样,语法是什么?

6 个答案:

答案 0 :(得分:12)

在您的问题中,您指定“在主文件之外”。如果你不是指“课外”,那么这将定义一个模块级变量:

myvar = 'something'

class myclass:
    pass

然后你可以这样做,假设类和变量定义在一个名为mymodule的模块中:

import mymodule

myinstance = myclass()
print mymodule.myvar 

另外,为了回应您对@ phihag的回答的评论,您可以像这样访问myvar不合格:

from mymodule import myvar

print myvar

如果您想在另一个文件中快速访问它,同时仍然在课程中定义它:

class myclass:
    myvar = 'something'

然后,在您需要访问它的文件中,在本地名称空间中分配一个引用:

myvar = myclass.myvar

print myvar

答案 1 :(得分:4)

你真的应该重新考虑这是否真的有必要,这似乎是一个奇怪的方式来构建你的程序,你应该phihag的方法更正确。

如果您仍然想要这样做,请按照以下方式进行:

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

答案 2 :(得分:3)

您可以简单地为该类分配一个属性:

class myclass(object):
   myvar = 'something'

# alternatively
myclass.myvar = 'else'

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

答案 3 :(得分:3)

回答你的问题

global s
s = 5

会这样做。您会遇到问题,具体取决于您在课堂上的位置。远离职能以获得所需的行为。

答案 4 :(得分: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'

答案 5 :(得分:0)

类中的全局变量也可以定义为:

    class Classname:
       name = 'Myname'

    # To access the variable name in a function inside this class:
    def myfunc(self):
        print(Classname.name)