ハッシュ表を出力する

K&R には、ハッシュ表を出力する事例はありません。そこで、名前/置換テキストを括弧で括ったリストとして表示させます。

class Nlist:
def __repr__(self):
s = ""
e = self
while e:
s += "%r: %r, "%(e.name, e.defn)
e = e.next
return "<%s>"%s[:-2]

class Htable:
def __str__(self):
return "%s(%s)"%(
self.__class__.__name__, self.hashtab)

メソッド __repr__ は、組み込み関数 repr の動作を規定して、オブジェクトに固有の「公式な」文字列表現を得ます。可能なら「同じオブジェクトを生成するのに有効なコード」を表わす文字列が得られるようにします。そうでなければ、括弧 <> の中に、オブジェクトに固有の「非公式な」文字列表現を記述します。ここでは、連結リストの各項目を、コロンで区切った形式「名前:定義」で表現します。
メソッド __str__ は、組み込み関数 str の動作を規定して、オブジェクトに固有の「非公式な」文字列表現を得ます。クラス属性 __name__ を参照すると、クラス名を変更したときの影響を最小限に止められます。