第7章. Pythonのモジュール
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
モジュールは、Pythonの定義とステートメントを含むファイルである。
この章では、Pythonコードの組織化を改善するためにいくつかのことを行う。 モジュールを使ってテストコードと本番コードを分離する。Python のスコープとインポートの規則が、コードの依存関係が正しいことを保証するのに役立っていることを確認する。最後に、コードから冗長性のあるテストを削除して、コンパクトで意味のあるものにする。
コードをモジュールに分ける
Money とPortfolio のプロダクション・コードとテスト・コードが同じファイル内にある。このコードを個別のソース・ファイルに分ける必要がある。
まず、test_money.py と同じフォルダに、money.py とportfolio.py という名前のファイルを作成しよう。フォルダ構造は以下のようになる:
py ├── money.py ├── portfolio.py └── test_money.py
Money とPortfolio クラスのコードを、それぞれmoney.py とportfolio.py に移す。このコード・セグメントは、このコード再配置後のportfolio.py の完全な内容を示している:
importfunctoolsimportoperatorclassPortfolio:def__init__(self):self.moneys=[]defadd(self,*moneys):self.moneys.extend(moneys)defevaluate(self,currency):total=functools.reduce(operator.add,map(lambdam:m.amount,self.moneys),0)returnMoney(total,currency)
クラスのコードと一緒に、2つのimport 。 Portfolioなぜなら、Portfolio はfunctools とoperator を使っているからである。
ここには示していないが、money.py というファイルにも同様に、Money クラスとそのメソッドが含まれている。
今テストを実行すると、古くからの友人であるNameError :
File"/Users/saleemsiddiqui/code/github/saleem/tdd-project/py/test_money.py",line22,intestAdditionfiveDollars=Money(5,"USD")NameError:name'Money'isnotdefined
テスト・クラスはMoney とPortfolio の両方に依存しているので、test_money.py の先頭にimport の文を追加する:
frommoneyimportMoneyfromportfolioimportPortfolio
Portfolio 内からNameError: name 'Money' is not defined を取得できるようになった!portfolio.py を見てみると、Money にも依存していることがわかる。そこで、
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access