@
OOP による解法への準備
OOP による解法を示す前に、前述した事例を再考します。
■ 事例:16進表記
前述した《事例》をクラスを用いて再構成すると、次のようになります。「指折り数えて何番目になるか」というメッセージを忠実に再現すると、次のようになります。
class HexDemo(object):
インスタンス属性 self.hex が保持する各各要素(長さ1の文字列)e を順にたどりながら、条件式 s == e を満たすときのオフセット n をリターン値とします。一致するものがないときには、-1 をリターン値とします。
各要素を順にたどりながら、条件を満たすときの値を得ることが「指折り数えて何番目になるか」に相当します。
これを実行すると、次のような結果が得られます。
def ex2(): demo = HexDemo("0123456789ABCDEF") for e in "0123456789ABCDEF@": print("Hex = %2d"%demo.index(e), ":", e) >>> ex2()
■ 事例:5段階評価
class IfElseDemo(object):
各要素を順にたどりながら、条件を満たすときの値を得ることが「指で寸法を測るといくつになるか」に相当します。
これを実行すると、次のような結果が得られます。
def ex1(): >>> ex1()
>>> SwitchDemo2 1900 : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 365 1910 : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 365 1920 : [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 366 1930 : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 365 1940 : [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 366 1950 : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 365 1960 : [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 366 1970 : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 365 1980 : [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 366 1990 : [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 365 2000 : [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 366