何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

PythonicではなくPythonesqueなクラスを書く

It’s…

プログラミング言語Pythonにおいて、Pythonらしい、といった概念をPythonicと呼ぶことがある。 Pythonicらしい書き方を知るにはZen of Pythonや『Effective Python』の第一章を参照すればその一端を知ることができる。

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

一方で、Pythonesqueという言葉もある。Pythonesqueとはプログラミング言語Pythonの名称のもとになったイギリスのコメディグループMonty Pythonのスケッチの不条理さを表した造語である。 折角なので「チーズショップ」(第3シーズン第7話)スケッチを引用する。

youtu.be

普段はPythonicな書き方を目指すべきであるが、たまにはPythonesqueな書き方をしてもよいのではないだろうか。 今回は、Pythonの特殊メソッドを変な風に実装することでPythonesqueなクラスを書く。 先ほど引用した「チーズショップ」スケッチのような辞書クラスを定義してみよう。

import collections


class CheeseShop(collections.UserDict):
    def __len__(self):
        return 0

    def __getitem__(self, item):
        raise KeyError


if __name__ == "__main__":
    shop = CheeseShop(Caerphilly="here")
    print("len(shop) = {}".format(len(shop)))
    for key in ("Red Leicester", "Tilsit", "Caerphilly"):
        try:
            print(key, shop[key])
        except KeyError:
            print("{} is not here!".format(key))

出力結果は以下の通りになる。

len(shop) = 0
Red Leicester is not here!
Tilsit is not here!
Caerphilly is not here!

絶対にこのような実装をしてはいけない(普通は良心が否定するか、レビュワーに殴られる)。 しかし、Python言語を理解する上では中々面白いと思う。