こうですか?よく分かりません。
目的
amountのプライベート化
原書と違うところ
11行目、12行目
原書ではassertEquals()にオブジェクトを渡しています。PythonのassertEqual()で同じことするとそれは違うオブジェクトを比較していると怒られます。比較したいのはamountなのでDollar.get_amount()を渡しています。
Javaの場合でも違うオブジェクトを渡しているのに何でそれらが等値と判断されるのかがよく分かりません。ちょっと直感的じゃないです。
29行目
オブジェクトの返り値を変更する方法がよく分からなかったのでamountを返すメソッドを定義しています。
まあ、この章の趣旨はDollar.amountをプライベート化しようということなのでいいかな?でも、Pythonだと厳密な意味でプライベート化できないみたいです。
#coding : utf-8 """ テスト駆動開発入門 4章 プライベート化 """ import unittest class TestMoney(unittest.TestCase): def testMultiplication(self): five = Dollar(5) self.assertEqual(Dollar(10).get_amount(), five.times(2).get_amount() ) self.assertEqual(Dollar(15).get_amount(), five.times(3).get_amount() ) def testEuality(self): self.assert_(Dollar(5).equals(Dollar(5) ) ) self.assert_(not Dollar(5).equals(Dollar(6) ) ) class Dollar(object): __amount = 0 def __init__(self, amount): self.__amount = amount def times(self, multiplier): return Dollar(self.__amount * multiplier) def equals(self, dollar): return self.__amount == dollar.get_amount() def get_amount(self): return self.__amount if __name__ == "__main__": unittest.main()