10

我试图从一个类中声明一个全局变量,如下所示:

class myclass:
    global myvar = 'something'

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

4

6 回答 6

15

在您的问题中,您指定“在主文件之外”。如果您的意思不是“在类之外”,那么这将用于定义模块级变量:

myvar = 'something'

class myclass:
    pass

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

import mymodule

myinstance = myclass()
print mymodule.myvar 

此外,为了回应您对@phihag 回答的评论,您可以访问 myvar unqualified ,如下所示:

from mymodule import myvar

print myvar

如果您只想从另一个文件中访问它的简写,同时仍在类中定义它:

class myclass:
    myvar = 'something'

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

myvar = myclass.myvar

print myvar
于 2012-04-09T16:33:40.723 回答
5

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

如果您决定仍要这样做,您可以这样做:

>>> class myclass(object):
...     global myvar
...     myvar = 'something'
...
>>> myvar
'something'
于 2012-04-09T16:37:47.437 回答
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'
于 2012-04-09T16:43:48.370 回答
2

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

class myclass(object):
   myvar = 'something'

# alternatively
myclass.myvar = 'else'

# somewhere else ...
print(myclass.myvar)
于 2012-04-09T16:30:19.390 回答
2

回答你的问题

global s
s = 5

会做的。不过,您会遇到问题,具体取决于您在课堂上的哪个位置执行此操作。远离函数以获得你想要的行为。

于 2012-04-09T16:38:43.567 回答
0

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

    class Classname:
       name = 'Myname'

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

于 2019-03-29T11:17:51.753 回答