先日訂正したけど、pythonのクラス機構がModula-3から来ているということで、いくつか調べてみた。
1,2つ目のリンクではクラスにメソッドを定義する際には、selfを使う事が書かれている。でも3つ目のリンクではそもそもクラスの話自体が出てこないのはなんでなんだろう...。
で、見た感じだとpythonのようなselfの定義の仕方というより、C++でそのメソッドがどのクラスに屬するのかを定義するのと同じ使い方だった。こうなってくるとますますわからないのはpythonでそもそもクラスのブロック内でメソッドを宣言するのに第一引数としてselfを指定しないといけないのか、わからなくなってきた。
以前見付けた、Python のクラスシステムのように後付けクラス機構で、実装上の制限だからということなんだろうか。
そうなると、PythonチュートリアルでC++ と Modula-3 で見られるクラスメカニズムを混合したものと書かれているけど、全然そうは思えない...。C++やModula-3ではクラスブロックの外でメソッドを定義しているけど(だからselfキーワードが必要なのは理解できる)、pythonはクラスブロックの中でメソッドを宣言しているにもかかわらずselfキーワードを必要としている。ちなみに、selfを抜いてメソッドを定義すると、定義はできるけど使おうとするとエラーを起こす。
pythonのクラス機構は意図してModula-3からとってきたのか、それともそういう形になってしまったのかがわからない。selfキーワード自体はもちろん必要なんだけど、第一引数にわざわざselfなんて書かせるのは格好悪いと思うんだよなぁ。
しかしModula-3はのきなみリンクが切れまくってて探しにくいのなんのって。国内にはModula-3の文法を説明したページなんて全然無いし。
pythonのクラスの概念がModula-3から受け継いだモノで、SmallTalkとは異なる概念であるので、pythonがどういう風に影響を受けているのかとても興味はあるんだけども、突っ込みすぎると泥沼っぽいんでどのくらいまで突っ込もうかなぁ。