我正在努力学习 Python,练习 48,使用鼻子测试来测试元组。我设置的nosetest如下:
def test_directions():
assert_equal(lexicon.scan("north"), [('direction', 'north')])
但是,我每次都会收到以下错误:
...line 5, in test_directions
assert_equal(lexicon.scan("north"), [('direction', 'north')])
TypeError: unbound method scan() must be called with lexicon instance
as first argument (got str instance instead)
如果我在“def scan(self):”上方引入@staticmethod,则会收到此错误:
line 24, in scan
words = self.sentence.split()
AttributeError: 'str' object has no attribute 'sentence'
我正在测试它的代码如下。我错过了什么?
class lexicon(object):
def __init__(self, sentence):
self.sentence = sentence
self.direction = "direction"
self.verb = "verb"
self.noun = "noun"
self.stop = "stop"
self.number = "number"
self.direction_words = ('north', 'south', 'east', 'west', 'up', 'down')
self.verb_words = ('go', 'stop', 'kill', 'eat')
self.noun_words = ('door', 'bear', 'princess', 'cabinet')
self.stop_words = ('the', 'in', 'of', 'from', 'at', 'it')
self.a = 0
self.instructions = []
def scan(self):
words = self.sentence.split()
self.a = 0
while self.a < len(words):
result = words[self.a]
if result in self.direction_words:
self.instructions.append(('direction', result))
elif result in self.verb_words:
self.instructions.append(('verb', result))
elif result in self.noun_words:
self.instructions.append(('noun', result))
elif result in self.stop_words:
self.instructions.append(('stop', result))
elif self.test_num(result) == None:
self.instructions.append(('number', "Error"))
else:
self.instructions.append(('number', result))
self.a += 1
return self.instructions
def test_num(self, num):
try:
return int(num)
except ValueError:
return None