It’s…
最近、いかに役に立たないプログラムを書くかということを考えている。 世の中では企業が自社の開発の成果の一部をオープンソースとして切り出してたくさんの人に使われている。 そうすると自分も何か公開するには何か役に立つものを公開しなくてはいけないのではないか、という強迫概念に囚われてしまう。 業務では業務のプログラムを書いているので、ここでは何も役に立たないプログラミングをしてみたい。
今回は、Pythonesqueなクラスとして毎回変化する文字列のクラスを実装する。
文字列が評価されるたびに内部で書き換わるという役に立たない代物である。
現在のPythonではstr
を直接継承してクラスを実装することが可能であるが、collections.UserString
を継承するほうがイタズラがしやすいと思われる。
import collections import random import string class StrangeString(collections.UserString): def __str__(self): self.data = "".join([random.choice(string.ascii_letters) for _ in range(random.randint(1, 10))]) return str(self.data) if __name__ == "__main__": s = StrangeString("abc") for _ in range(10): print(s, s.upper(), s.lower())
実行結果は以下のとおりである。 実装からわかるように結果はランダムに変化する。
GCPp UAaiHZoGk UaTvs ZoBIW olrixlE FUfCS GTR S Itsq CImAlqaHY ZBNY JoYBhYe wdNtMJIAa EvQgkA oSfSRkj DfwsTVxuaT cRZRtmOl BRKZjSav GZW jcXG bpw GpeN ecM EbwyaDsqK naU rpRCnwhe vP ZCD tK vqwJrSHkg
なるほど無秩序な結果となったが、無秩序な中にも秩序を求めたい。
s.upper()
としたら結果が毎回ランダムになろうとも大文字になって欲しい。s.title()
はタイトルであるべきだ。