Я новичок, работающий через Learn Python на нелегком пути.
Цель этого упражнения - написать сканер слов, который будет проходить тесты носа при запуске с помощью предоставленного модульного теста.
При выполнении тестов носа в следующем предоставленном модульном тесте я получал эту ошибку:
`TypeError: необязательный метод scan () должен вызываться с экземпляром лексикона в качестве первого аргумента (вместо этого получен экземпляр str)
Контрольный урок
from nose.tools import *
from ex48 import lexicon
def test_directions():
assert_equal(lex.scan("north"), [('direction', 'north')])
result = lex.scan("north south east")
assert_equal(result, [('direction', 'north'),
('direction', 'south'),
('direction', 'east)])
После некоторого расследования я нашел здесь пользователя, который выполняет то же упражнение:
тесты на носу, питон
переменные Python, классы
Ответ на этот вопрос предполагает создание (создание экземпляра?) Метода внутри модульного теста. Поэтому я сделал следующую модификацию и записал свой класс в файл ex48.py, и он проходит тестирование носа.
Модифицированный тест
from nose.tools import *
from ex48 import lexicon
def test_directions():
lex = lexicon("north")
assert_equal(lex.scan("north"), [('direction', 'north')])
lex = lexicon("north south east")
result = lex.scan("north south east")
assert_equal(result, [('direction', 'north'),
('direction', 'south'),
('direction', 'east')])
ex48.py - Сканер
class lexicon(object):
def __init__(self, data):
#nosetests fails me if I don't put in some dummy
# __init__ function with a dummy line, not sure why.
self.direction = data
def scan(self, data):
split_data = data.split()
directions = ['north', 'south', 'east', 'west']
data_reply = []
#for loop for the length of the list
for split_data_item in split_data:
#If data is in the directions list
if split_data_item in directions:
#Add [('direction', data)] to a dict
data_reply.append(('direction', split_data_item))
#Return the list
return data_reply
Я не уверен, что модульный тест должен был быть изменен. Я нашел подсказку о «непосредственном создании объекта» здесь:
Python: вызывает ли метод 'непосредственно' создание экземпляра объекта?
Но я не уверен, применимо ли это. Можно ли сделать сканер для создания самого экземпляра, или поставляемый модульный тест - это уловка «вопрос» и его нужно модифицировать?