[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
質問
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 では
関連
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python jiabaライブラリの使用方法について説明
-
Python 入出力と高次代入の基礎知識
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?