Python のクラスとはなにか?と疑問する前に読んでほしいエッセイ
「クラスとはなにか?」と考えて、クラスの概念を調べる時間はほとんど無駄に終わります。そう言うと
「偉そうに! すでにわかっているからわかっていない人のキモチがわからないんだ!」
と思うかもしれない。でも、私もわからなかったときがあるんです。わからない人の気持ちはわけわからんわけでもなくもない。
今から 20 年前、いじめられっ子のバイブル「A・Iが止まらない!」を読んでプログラミング言語をしこしこ勉強していました。そして
class User:
def __init__(self):
self.name = ''
a = User()
a.name = 'Apple'
print(a.name) # Apple
といったソースコードを見て「クラスはいったいなんのためにあるんだ?」と悩んでいた。「関数だけで足りるだろ、バカ! 神戸ひとしもスパゲッティソースを書いているに違いない」と思うことにして、クラスを使わないでうんこソースを書いていた。そうしているうちに、プログラミングに飽きて気づいたら大学院生に。
大学院生のとき、私はあるソフトウェア会社で働いていました。私はうぬぼれた天才だったので、「クラスは使いません。関数をスパゲッティにします」と 1 万行のコードをさらりと書いていました。
が、二週間くらいすると破綻します。「関数だけではやっぱり無理っポイ」と気づくんです。
関数をめちゃんこ書いていると「う〜ん、つなげたい」「共有してもっと抽象化したいナリ」と思うときがきますよね。「うん、こない」というあなたは、このページを読んでいいほど経験を積んでおらず、クラスを理解したい気概もなさそう。
抽象化したいな、という願望をつきつめるとクラスが出てくるんですね。関数 A B の一部が C でつくられていたら、C をとりだして A の中の C を除去します。このさい、一部の変数も除去手術したいなと思うのです。数万行のコードを書いていると。
関数だけでなく、変数も抽象化(あるいは共有)したいと思ったらクラスの説明書を読んでください。ワケワカメどころか、スーッと入ってきますよ。こんな簡単なこともわかっていなかったなんてと。
自転車をじっと見ているだけで自転車が乗れるほど、視神経と大腿筋は接続されていない。クラスを理解するためのニューロンは、ゲテモノ関数スパゲッティを開発したときにつくられるのです。
クラスとはなにか? それは、うんこコードを除去したいときに考えるべきものです。