私は、難解な方法でPythonを学習するnewbです。Pythonでメソッドをより効率的に呼び出す
この練習のポイントは、提供された単体テストで実行されるときにnosetestsを通過するための単語スキャナを書くことです。
`TypeError例外::私はこのエラーになっていた以下の提供ユニットテストでnosetestsを実行中
辞書インスタンスで呼び出されなければならない)、非結合方式のスキャンを(最初の引数は
(代わりに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)])
私はここに同じ運動を通じて取り組んでいるユーザーを見つけたいくつかの調査の後:
が答えが(instaniating?)インスタンス提案単体テスト内部方法。だから私は次の修正を行い、ファイルex48.pyでクラスを書き留め、それはnosetestsを渡します。
修正テスト
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
私はユニットテストが変更されることを意図したかはわかりません。私はここで「オブジェクトを直接intantiating」についての手掛かりが見つかりました:
Python: does calling a method 'directly' instantiate the object?
をしかし、これが適用されるかどうかわからないです。スキャナをインスタンス化するためにスキャナを作成することはできますか、または提供されたユニットはトリック「質問」をテストし、変更する必要がありますか?
これはちょっとした修正が加えられました: 'def scan(data):'ありがとうございました。 :) –
@スティーブナロー:ありがとう、私は私の答えを編集しました。 –