关于Python:Python – 如何编写一个“getter”函数,它将返回存储在我的模块中的变量(如果需要,首先启动它)?

Python - how do I write a “getter” function that will return a variable stored in my module (initiating it first if needed)?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
UnboundLocalError: local variable ‘url_request’ referenced before assignment

以下是我的模块的完整代码,称为util.py

1
2
3
4
5
6
7
8
import my_other_module

__IMPORTANT_OBJECT__ = None

def getImportantObject():
    if __IMPORTANT_OBJECT__ is None:
        __IMPORTANT_OBJECT__ = my_other_module.ImportantObject()
    return __IMPORTANT_OBJECT__

我的理解是,前缀为双下划线的变量被认为是模块的私有变量。这里的想法是,我要存储对重要对象的私有引用,并将其返回给通过getImportantObject()方法请求它的任何人。但在第一次调用此方法之前,我不希望启动对象。

但是,当我运行代码时,会得到以下错误:

1
2
3
File"/Users/Jon/dev/util.py", line 6, in getImportantObject
    if __IMPORTANT_OBJECT__ is None:
UnboundLocalError: local variable '__IMPORTANT_OBJECT__' referenced before assignment

我在这里要做的事情,推荐的方法是什么?


该变量不被视为私有变量,而是被视为局部变量。

使用global关键字将其标记为:

1
2
3
4
5
def getImportantObject():
    global __IMPORTANT_OBJECT__
    if __IMPORTANT_OBJECT__ is None:
        __IMPORTANT_OBJECT__ = my_other_module.ImportantObject()
    return __IMPORTANT_OBJECT__