作者: 機械伯爵
日時: 2002/4/6(10:16)
 ども、機械です。

> >  ちなみに、最初の定義の直後のインスタンスと、再定義後のインスタンス
> > の情報を見てみると、おなじ名前の全く別のオブジェクト(クラス)を
> > 参照していることがわかります。
> > 
> <中略> 
> >  Pythonは別段「Object」のような「最上位クラス」は存在せず、自然発生
> > 的に適当にクラスが出来るので、そういう必然性は無いみたいです(ここら
> > へん、C++に近いけど、C++ではクラスメソッドは拡張できる)
> 
> この辺の記述が???なのですが、持っている本(*1)に「クラスは、"クラス
> 型"のオブジェクトである」ということが書いてあるので、私は以下のように
> 理解してます。
> * "class A: ..."とは、"クラス型"のオブジェクトを生成し、そのリファレンス
>   をAが持つこと
> * 同じ"A"でクラスを定義することは、単に異なるオブジェクトのリファレンスを
>   代入しているだけ。
> 
> という感じで、上記のクラスの2回の定義は「a=2して、a=3したあとにprint a
> しても2は表示されない」のと同様に、(Python的には)普通の動作なんだと思います。

 え〜と、このネタ、Ruby会議室発言42あたりから、引いてます(汗)

 なんのことかといいますと、この発言のRubyのコードの部分に書いてあったとおり、
Rubyの場合はclassキーワードを使ってメソッドの拡張を行うわけです。

 ところが、Pythonだと、classキーワードを使うと、新しいクラスができちゃうもん
で、おっしゃる通りの結果になります。

 あとあとに続く発言[TSpython:89]の通り、結局はPythonでもclassキーワードさえ
使わなければ、フツーにメソッド拡張できるみたいです。

※あ、そうそう、上のC++うんぬんのたわごとは忘れてください・・・静的言語でクラス
 拡張なんて出来るわけないですから・・・コンパイル前なら定義は後で書けますけど、
 一旦コンパイルされたらダメですわな・・・

 結局、書き方のスタイルの違い、というだけだったみたいです。

   機械伯爵

※「テクニカル〜」は、Win版やJthon(元JPython)のネタまで載ってるので、重宝
 してます。ピアソン・エデュケーション刊のPython本2冊目「Pythonで学ぶ〜」
 は、現在取り寄せ中(原書はアジソン・ウェスレイ刊)。