我试图从一个类中声明一个全局变量,如下所示:
class myclass:
global myvar = 'something'
我需要在类之外访问它,但我不想在类文件之外声明它。我的问题是,这可能吗?如果是这样,语法是什么?
在您的问题中,您指定“在主文件之外”。如果您的意思不是“在类之外”,那么这将用于定义模块级变量:
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
你真的应该重新考虑这是否真的有必要,这似乎是一种奇怪的方式来构建你的程序,你应该使用更正确的 phihag 方法。
如果您决定仍要这样做,您可以这样做:
>>> class myclass(object):
... global myvar
... myvar = 'something'
...
>>> myvar
'something'
你可以这样做
# 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'
您可以简单地为类分配一个属性:
class myclass(object):
myvar = 'something'
# alternatively
myclass.myvar = 'else'
# somewhere else ...
print(myclass.myvar)
回答你的问题
global s
s = 5
会做的。不过,您会遇到问题,具体取决于您在课堂上的哪个位置执行此操作。远离函数以获得你想要的行为。
类中的全局变量也可以定义为:
class Classname:
name = 'Myname'
# To access the variable name in a function inside this class:
def myfunc(self):
print(Classname.name)