全局名称未在Python中定义错误

时间:2014-01-18 06:28:10

标签: python class global-variables

我正在Python中实现我的第一个class,并且正在努力使其工作。我从一个非常简单的例子开始:

#!/usr/bin/env python
"""

"""
import fetcher as fetcher
import fetchQueue as fetchQueue

    def __init__(self, seed = "a string"):
        self.seed = seed
        myFetchQueue = fetchQueue.FETCHQueue()

    def test(self):
        print "test"
        myFetchQueue.push(seed)
        myFetchQueue.pop()


#Entrance of this script, just like the "main()" function in C.
if __name__ == "__main__":
    import sys
    myGraphBuilder = GRAPHBuilder()
    myGraphBuilder.test()

并且这个类应该以非常类似的方式调用另一个我定义的类的方法。

#!/usr/bin/env python
"""

"""

from collections import defaultdict
from Queue import Queue

class FETCHQueue():

    linkQueue = Queue(maxsize=0)
    visitedLinkDictionary = defaultdict(int)

    #Push a list of links in the QUEUE
    def push( linkList ):
        print linkList

    #Pop the next link to be fetched
    def pop():
        print "pop"

然而,当我运行代码时,我得到了这个输出:

test Traceback (most recent call last):   File "buildWebGraph.py", line 40, in <module>
    myGraphBuilder.test()   File "buildWebGraph.py", line 32, in test
    myFetchQueue.push(seed) NameError: global name 'myFetchQueue' is not defined

所以我想类GRAPHBuilderFETCHQueue的对象的构造是有效的,否则我会在字符串测试输出之前得到一个错误,但是其他东西出错了。你能救我吗?

1 个答案:

答案 0 :(得分:1)

def __init__(self, seed = "a string"):
    self.seed = seed
    myFetchQueue = fetchQueue.FETCHQueue()

此处,myFetchQueue__init__函数的局部变量。因此,它不适用于该类中的其他功能。您可能希望将其添加到当前实例,例如

    self.myFetchQueue = fetchQueue.FETCHQueue()

同样,当您访问它时,您必须使用相应的实例访问它,例如

    self.myFetchQueue.push(self.seed)
    self.myFetchQueue.pop()