PythonでTDD(2) オブジェクトの副作用

前回の実装ではDollarオブジェクトの値が変化する、すなわちオブジェクトに副作用の問題があります。Dollarオブジェクトの性質としては、$5は$5で変化しないことが望ましい為、timesメソッドで自身の状態を変化させずに新たらしいDollarを返すようにしましょう。
テストコードです。

    def test_multiplication(self):
        """
        乗法に関するテスト
        $5 * 2 = 10
       """
        five = Dollar(5)
        product = five.times(2)
        self.assertEqual(10, product.amount)
        product = five.times(3)
        self.assertEqual(15, product.amount)

Javaとは違ってテストは実行可能です。しかし、timesメソッドの戻り値がないためエラーが発生します。

'NoneType' object has no attribute 'amount'

timesメソッドで新しいDollarを返すように修正します。

    def times(self, multipaier):
        return Dollar(self.amount * multipaier)

テストは成功しました。忘れずにコミットしておきます。