ども、機械です。
> > ちなみに、最初の定義の直後のインスタンスと、再定義後のインスタンス
> > の情報を見てみると、おなじ名前の全く別のオブジェクト(クラス)を
> > 参照していることがわかります。
> >
> <中略>
> > 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で学ぶ〜」
は、現在取り寄せ中(原書はアジソン・ウェスレイ刊)。