作者: ゴン太
日時: 2002/4/6(04:15)
こんばんは、

> 
> class A:
>   def x(self):
>     print "x"
> 
> class A:  # ここで、前のAが破棄される
>   def y(self):
>     print "y"
> 
>  これでクラスAのインスタンスからx()メソッドを呼び出すと、
>  「んなもんはない」
>  と、冷たくあしらわれます。
> 
>  ちなみに、最初の定義の直後のインスタンスと、再定義後のインスタンス
> の情報を見てみると、おなじ名前の全く別のオブジェクト(クラス)を
> 参照していることがわかります。
> 
<中略> 
>  Pythonは別段「Object」のような「最上位クラス」は存在せず、自然発生
> 的に適当にクラスが出来るので、そういう必然性は無いみたいです(ここら
> へん、C++に近いけど、C++ではクラスメソッドは拡張できる)

この辺の記述が???なのですが、持っている本(*1)に「クラスは、"クラス
型"のオブジェクトである」ということが書いてあるので、私は以下のように
理解してます。
* "class A: ..."とは、"クラス型"のオブジェクトを生成し、そのリファレンス
  をAが持つこと
* 同じ"A"でクラスを定義することは、単に異なるオブジェクトのリファレンスを
  代入しているだけ。

という感じで、上記のクラスの2回の定義は「a=2して、a=3したあとにprint a
しても2は表示されない」のと同様に、(Python的には)普通の動作なんだと思います。

*1 「Python テクニカルリファレンス」ピアソン・エデュケーション

> 
>  まぁ、こういうあやしいことは出来ますが・・・
<攻略>


参考になれば