我正在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
所以我想类GRAPHBuilder
和FETCHQueue
的对象的构造是有效的,否则我会在字符串测试输出之前得到一个错误,但是其他东西出错了。你能救我吗?
答案 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()