@

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