7

以下の 2 つのクラスの違いは何ですか? この事件に関する関連情報はありますか?どうもありがとうございました。

class test(object):
  def __init__(self, name):
     print name

class test():
  def __init__(self, name):
     print name
4

3 に答える 3

4

python 2.xでは、継承するクラスobjectは新しいスタイルのクラスになりますが、他のクラスはそうではありませんが、python3.xでは両方とも新しいスタイルになります。

ただし、新旧の違いはかなり高度であるため(たとえば、属性の検索順序)、初心者は非互換性についてあまり心配する必要はありません。

興味がある場合は、この回答を参照してください。ただし、ライブラリ開発者などにとっては重要です。

于 2012-09-14T15:41:57.003 に答える
4

うーん...このwikiページは違いを非常に例証的に説明しています:http://wiki.python.org/moin/NewClassVsClassicClass

そして、Old-(Classic)-Style クラスと New-Style クラスがpy3で同じであるという情報を含むいくつかの回答を見ました -> それは正しくありません:

ここに画像の説明を入力 古いスタイルのクラスは Python 3 で削除され、新しいスタイルのクラスのセマンティクスのみが残ります

これに加えて、New-Style クラスは Python 2.2 からかなり利用可能になりました。2.1 まではクラシック スタイルを使用する必要がありました-> ここを参照してください

違い/情報に関する短い要約は次のとおりです。

  • Python 2.2 から新しいスタイルのクラスが利用可能になりました
  • 新しいスタイルのクラスは記述子を使用できますが、古いスタイルのクラスは記述子を使用できません
  • 新しい Style クラスはほとんどの組み込み型をサブクラス化できますが、古い Style クラスはサブクラス化できません
  • 新しいスタイル クラスは、新しいメタモデルをサポートします (たとえば、type()ビルトインの動作に大きな影響を与えます)。
  • 古いスタイルのクラスは、階層を調べる前にインスタンスの属性を見つけます - 新しいスタイルのクラスは、書き込み可能な記述子である場合、クラス定義を優先させます
  • 古いスタイルのクラスは Python 3 で削除されました

しかし、ほとんどの場合、新しいスタイルのクラスの導入は、Python のディスクリプタの出現に影響を受けています --> 詳細はこちら.

于 2012-09-14T16:32:17.460 に答える
-3

この場合、なし。最初はオブジェクトから基本クラスとして明示的に継承し、2番目はオブジェクトから暗黙的に継承するためです。

于 2012-09-14T15:31:02.650 に答える