1. ホーム
  2. python

[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?

2022-03-20 01:06:48

質問

Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか? どのような場合にどちらかを使うべきですか?

どのように解決するのですか?

から 新スタイルとクラシッククラス :

Python 2.1 までは、古いスタイルのクラスが唯一のフレーバーでした。

(旧来の)クラスの概念は、型の概念とは無関係である。 もし x が旧式のクラスのインスタンスであれば x.__class__ のクラスを指定します。 x しかし type(x) は常に <type 'instance'> .

これは、すべての旧式のインスタンスが、独立した形で という単一の組み込み型を使って実装されています。 のインスタンスです。

Python 2.2では、クラスと型の概念を統一するために、新しいスタイルのクラスが導入されました。 . 新スタイルのクラスは、単にユーザー定義の型であり、それ以上でも以下でもありません。

xが新スタイルのクラスのインスタンスである場合、次のようになります。 type(x) は通常 と同じです。 x.__class__ (ただし、これは保証されるものではありません。 新スタイルのクラスインスタンスは に対して x.__class__ ).

新スタイルのクラスを導入する大きな動機は、完全なメタモデルを持つ統一されたオブジェクトモデルを提供することです .

また、即効性のあるメリットも数多くあります。 ほとんどの組み込み型のサブクラス化や、"descriptors" の導入が可能です。 を導入し、計算されたプロパティを使用できるようにしました。

互換性のため、クラスはデフォルトで古いスタイルのままです。 .

新スタイルのクラスは、他の新スタイルのクラスを指定することで作成されます。 (すなわち型) を親クラスとして、または、quot;トップレベルの型" がない場合は、オブジェクトを親クラスとして使用します。 他の親を必要としない。

新スタイルのクラスの動作は、旧スタイルのクラスの動作とは異なります。 クラスは、typeがどのようなものであるかに加えて、いくつかの重要な詳細があります。 を返します。

これらの変更の中には、新しいオブジェクト・モデルにとって基本的なものがあります。 特殊なメソッドを呼び出す方法。その他は、quot;fix" と呼ばれる、特殊なメソッドの呼び出し方です。 メソッドのように、互換性の問題から以前は実装されていませんでした。 多重継承の場合の解決順序

Python 3 には新スタイルのクラスしかない .

からサブクラス化しても object は、クラスは新しいスタイルです。 は、Python 3 では