Python の多重継承におけるダイヤモンド継承
この記事では、Python の多重継承におけるダイヤモンド継承の使い方を紹介します。これから Python を学習する友人の参考になれば幸いです。
継承はオブジェクト指向プログラミングの重要な方法であり、継承を通じてサブクラスは親クラスの機能を拡張できます。 Python では、クラスは複数の親クラスから継承することができ、これを Python の 多重継承 (多重継承) と呼びます。
構文
class SubclassName(BaseClass1, BaseClass2, BaseClass3, ...): pass
ひし形の継承
推奨学習: Python ビデオ チュートリアル
複数レベルでの継承多重継承と併用すると、多重継承など複雑な継承関係が現れます。
その中に、ダイヤモンドの継承が登場します。以下に示すように。
この構造では呼び出し順序に疑問があります。呼び出し順序は次のどれですか?
- D-> B-> A->C (深さ優先)
- D->B->C->A (幅優先)
答えてみましょうこの質問。
例を見てみましょう:
class A(): def __init__(self): print('init A...') print('end A...') class B(A): def __init__(self): print('init B...') A.__init__(self) print('end B...') class C(A): def __init__(self): print('init C...') A.__init__(self) print('end C...') class D(B, C): def __init__(self): print('init D...') B.__init__(self) C.__init__(self) print('end D...') if __name__ == '__main__': D()
出力結果
init D... init B... init A... end A... end B... init C... init A... end A... end C... end D...
出力結果からの呼び出しシーケンスは次のとおりです: D->B->A->C ->A. B と C が共同で A を継承し、A が 2 回呼び出されていることがわかります。 A を 2 回呼び出す必要はありません。
実は、上記の問題の根本原因はすべて MRO に関係しています。MRO (Method Resolution Order) は Method Resolution Order とも呼ばれ、主に使用されます。多重継承時の解決を決定します。属性はどのクラスから来ますか? C3 というアルゴリズムを使用します。基本的な考え方は、 は幅を最初に使用し、左から右へ、同じクラスが複数回呼び出される場合、必要なプロパティとメソッドを見つけるための原則。
それでは、最上位の親クラスのメソッドが複数回呼び出されるのを防ぐにはどうすればよいでしょうか? この時点では Super() が必要です。Super は本質的に MRO 情報を内部的に記録するクラスです。 C3 アルゴリズムでは、同じクラスが 1 回だけ検索されるようにするため、最上位の親クラスのメソッドが複数回実行されるのを回避できます。上記のコードは次のように変更できます。
class A(): def __init__(self): print('init A...') print('end A...') class B(A): def __init__(self): print('init B...') super(B, self).__init__() print('end B...') class C(A): def __init__(self): print('init C...') super(C, self).__init__() print('end C...') class D(B, C): def __init__(self): print('init D...') super(D, self).__init__() print('end D...') if __name__ == '__main__': D()
出力結果:
init D... init B... init C... init A... end A... end C... end B... end D...
このときの呼び出し順序は、D->B->C->A であることがわかります。つまり、breadth-first トラバーサル方法が使用されます。
補足内容
Pythonのクラスは、classicクラスと呼ばれるクラスと、new styleクラスと呼ばれるクラスの2種類に分けられます。どちらも多重継承をサポートしていますが、継承の順序が異なります。
- 新しいスタイル クラス: オブジェクトから継承されたクラス。 (例: class A(object))。breadth-first 検索 (つまり、最初に水平方向の検索、次に上方向の検索) を使用して継承されます。
- クラシック クラス: オブジェクトを継承しないクラス。 (例: class A())、 Depth-first 検索メソッドを使用して継承します (つまり、最初に継承ツリーの左側に深く入り、次に戻り、右側を見つけます)。
Python 2.x には、クラシック クラスと新しいクラスの 2 種類のクラスがあります。 Python3.x には新しいスタイルのクラスがたくさんあります。
その他の Python 関連のチュートリアルについては、Python チュートリアル 列に注目してください。
以上がPython の多重継承におけるダイヤモンド継承の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

Redisサーバーを起動する手順には、以下が含まれます。オペレーティングシステムに従ってRedisをインストールします。 Redis-Server(Linux/Macos)またはRedis-Server.exe(Windows)を介してRedisサービスを開始します。 Redis-Cli ping(Linux/macos)またはRedis-Cli.exePing(Windows)コマンドを使用して、サービスステータスを確認します。 Redis-Cli、Python、node.jsなどのRedisクライアントを使用して、サーバーにアクセスします。

Redisメモリサイズの設定は、次の要因を考慮する必要があります。データ量と成長傾向:保存されたデータのサイズと成長率を推定します。データ型:異なるタイプ(リスト、ハッシュなど)は異なるメモリを占めます。キャッシュポリシー:完全なキャッシュ、部分キャッシュ、フェージングポリシーは、メモリの使用に影響します。ビジネスピーク:トラフィックピークに対処するのに十分なメモリを残します。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

** Redisメモリ構成のコアパラメーターはMaxMemoryであり、Redisが使用できるメモリの量を制限します。この制限を超えると、Redisは、Maxmemory-Policyに従って除去戦略を実行します。これには、次のようになります。その他の関連パラメーターには、Maxmemory-Samples(LRUサンプル量)、RDB圧縮が含まれます

Redis Persistenceは余分なメモリを取り、RDBはスナップショットを生成するときに一時的にメモリの使用量を増加させ、AOFはログを追加するときにメモリを取り上げ続けます。影響要因には、データのボリューム、永続性ポリシー、Redis構成が含まれます。影響を緩和するために、RDBスナップショットポリシーを合理的に構成し、AOF構成を最適化し、ハードウェアをアップグレードし、メモリの使用量を監視できます。さらに、パフォーマンスとデータセキュリティのバランスを見つけることが重要です。

Redisのデータを読み取るには、次の手順に従うことができます。1。Redisサーバーに接続します。 2。(key)を使用してキーの値を取得します。 3.文字列値が必要な場合は、バイナリ値をデコードします。 4.使用(キー)を使用して、キーが存在するかどうかを確認します。 5。mget(キー)を使用して、複数の値を取得します。 6。タイプ(キー)を使用してデータ型を取得します。 7. Redisには、次のような他の読み取りコマンドがあります。すべてのキーを一致するパターンで取得し、カーソルを使用してキーを反復し、キー値を並べ替えます。
