Python 超全局变量?

4 投票
5 回答
4748 浏览
提问于 2025-04-15 11:06

在Python中有没有类似PHP那样的超级全局变量?我有一些变量想在整个项目中使用,包括不同的文件、类和函数,但我不想在每个文件里都重复声明这些变量。

5 个回答

4

即使有这样的写法,你也绝对不应该使用它。可以考虑使用一种叫做“borg模式”的方式来处理这类问题。

class Config:
    """
    Borg singlton config object
    """
    __we_are_one = {}
    __myvalue = ""

    def __init__(self):
        #implement the borg patter (we are one)
        self.__dict__ = self.__we_are_one

    def myvalue(self, value=None):
        if value:
           self.__myvalue = value
        return self.__myvalue

conf = Config()
conf.myvalue("Hello")
conf2 = Config()
print conf2.myvalue()

在这里,我们使用borg模式来创建一个单例对象。无论你在代码的哪个地方使用这个对象,'myvalue'的值都是一样的,不管你在什么模块或类中实例化Config。

6

创建一个空的 superglobal.py 模块。
在你的文件中这样做:

import superglobal
superglobal.whatever = loacalWhatever
other = superglobal.other
20

理论上是可以的,你可以往 __builtin__ 里随便放东西:

>>> import __builtin__
>>> __builtin__.rubbish= 3
>>> rubbish
3

但是,千万不要这么做;这简直是个大坏事,会让你的应用程序得“编程癌”。

我有很多类和函数,不想一直重复声明。

把它们放到模块里,等需要用的时候再‘导入’就行了。

我有一些变量想在整个项目中使用。

如果你真的需要一些不带前缀的值,可以把它们放在一个叫“mypackage/constants.py”的文件里,然后:

from mypackage.constants import *

如果这些真的是“变量”,也就是说在应用运行时会改变,你就需要把它们放到对象里去管理。

撰写回答