0

我正在尝试测试以下简单对象:

class WebCorpus(object):
    def __init__(self):
        _index = {}
        _graph = {}
        _ranks = {}
        _corpusChanged = False

    def lookup(self, keyword):
        if keyword in _index:
            return _index[keyword]
        return None
# (some irrelevant code)

和:

from WebCorpus import WebCorpus

def test_engine():
    print "Testing..."
    content = """This is a sample <a href="http://www.example.com">webpage</a> with 
    <a href="http://www.go.to">two links</a> that lead nowhere special."""
    outlinks = ["http://www.example.com", "http://www.go.to"]

    corpus = WebCorpus()
    assert corpus.lookup("anything") == None
#(some more code)
test_engine()

但它给了我一个错误: NameError: global name '_index' is not defined。我不明白这一点,_index 在__init__!?我的错误是什么?帮助表示赞赏。

4

2 回答 2

4

为了在类方法中设置类变量,您应该使用self

class WebCorpus(object):
    def __init__(self):
        self._index = {}
        self._graph = {}
        self._ranks = {}
        self._corpusChanged = False

    def lookup(self, keyword):
        if keyword in self._index:
            return self._index[keyword]
        return None

或者,您可以像这样简化代码并设置变量(我也简化了lookup方法):

class WebCorpus(object):
    _index = {}
    _graph = {}
    _ranks = {}
    _corpusChanged = False

    def lookup(self, keyword):
        return self._index.get(keyword)

请注意,第二个示例不等同于第一个示例,因为使用了类级别的变量,请参见下面的注释。

于 2013-07-13T21:04:42.803 回答
2

这里发生的是它正在定义_index,但在运行后会丢失它__init__。您应该附加self到所有内容,所以它是self._index等。这适用于整个班级,而不仅仅是__init__.

于 2013-07-13T21:06:50.657 回答