Python のポリモーフィズムを理解する方法
Python はポリモーフィズムをサポートしていませんし、ポリモーフィズムをサポートする必要もありません。Python はポリモーフィック言語であり、ダック タイピングを推奨しています。オブジェクトの有効なセマンティクスは、特定のクラスからの継承や特定のインターフェイスの実装によってではなく、現在のメソッドとプロパティのセットによって決まります。
ポリモーフィズム
は、親オブジェクトをその 1 つ以上の子オブジェクトと等しく設定できるようにする手法です。たとえば、Parent:=Child; などです。 More Morphism を使用すると、同じクラス (基本クラス) のポインターを使用して、異なるクラスのオブジェクトを参照したり、参照されるオブジェクトに応じて異なる方法で同じ操作を実行したりすることが可能になります。
関連する推奨事項: "Python ビデオ チュートリアル "
class A: def prt(self): print("A") class B(A): def prt(self): print("B") class C(A): def prt(self): print("C") class D(A): pass class E: def prt(self): print("E") class F: pass def test(arg): arg.prt() a = A() b = B() c = C() d = D() e = E() f = F() test(a) test(b) test(c) test(d) test(e) test(f) 输出结果 A B C A E Traceback (most recent call last): File "D:/Python/多态1.py", line 45, in <module> test(f) File "D:/Python/多态1.py", line 30, in test arg.prt() AttributeError: 'F' object has no attribute 'prt' Process finished with exit code 1
一見すると、Python は test(a)、test(b)、test( を呼び出す) ポリモーフィズムをサポートしているように見えます。 c )、test(d) は非常にうまく機能しますが、以下は大きく異なります。
test(e) を呼び出すとき、Python は e の prt メソッドを呼び出すだけで、e が A サブクラスのオブジェクトであるかどうかは判断しません (実際、テスト メソッドの定義時にパラメーターの型は指定されません) 、そしてPythonはそれをまったく判断できません)。
test(f) を呼び出すときにエラーが発生します。理由は非常に単純で、f には prt メソッドがありません。
まず第一に、Python はポリモーフィズムをサポートしていませんし、ポリモーフィズムをサポートする必要もありません。Python はポリモーフィック言語であり、ダック タイピングを推奨しています。以下は、Wikipedia からのダック タイピングの説明です:
プログラミングにおけるダック タイピング (英語: duck testing) は、動的型付けの 1 つのスタイルです。このスタイルでは、オブジェクトの有効なセマンティクスは、特定のクラスからの継承や特定のインターフェイスの実装によってではなく、現在のメソッドとプロパティのセットによって決まります。この概念の名前は、ジェームズ ウィットコム ライリーによって提案されたアヒル テストに由来しています。「アヒル テスト」は次のように表現できます:
「アヒルのように歩き、アヒルのように泳ぐ鳥を見ると、
アヒルタイピングでは、オブジェクト自体のタイプではなく、それがどのように使用されるかに焦点が当てられます。たとえば、
アヒル タイピングを使用しない言語では、アヒル型のオブジェクトを受け入れ、その walk メソッドと bark メソッドを呼び出す関数を作成できます。
ダックタイピングを使用する言語では、このような関数は任意の型のオブジェクトを受け入れ、その walk メソッドと call メソッドを呼び出すことができます。呼び出す必要があるメソッドが存在しない場合は、実行時エラーが発生します。正しい walk メソッドと call メソッドを持つオブジェクトはすべて関数で受け入れられるという事実が上記のステートメントにつながり、型を決定するこの方法の名前が付けられました。
ダックタイピングは、多くの場合、メソッドや関数のパラメーターの型をテストするのではなく、ドキュメント、明確なコード、および正しい使用法を保証するためのテストに依存することでメリットが得られます。静的型付け言語から動的型付け言語に移行するユーザーは、多くの場合、静的 (実行時前) 型チェックを追加しようとします。これにより、ダック タイピングの利点とスケーラビリティが損なわれ、言語の動的な性質が制約されます。
Python のオブジェクトもメモリの一部であることに疑いの余地はありません。メモリには属性とメソッドに加えて、オブジェクトの型も含まれます。a= などの参照を通じてオブジェクトにアクセスします。 A(). まず、Python でオブジェクト A を作成し、変数 a を宣言して、変数 a をオブジェクト A に関連付けます。変数 a には型がありません。その型は、関連付けられているオブジェクトによって異なります。 a=A() のとき、a は型 A の参照です。 a は型 A であると言えます。 a に値 3 が割り当てられ、a=3 の場合、a は整数参照ですが、Python は弱いわけではありません。言語を入力します。Python では '2' 3 はエラーを報告しますが、PHP では '2' 3 は 5 を返します。 Python の変数は c のポインタに似ていることがわかります。c との違いは、Python の変数は任意の型を指すことができることです。これを言うのは正確ではありませんが、理解しやすいです。
したがって、Python の実行中、パラメーターが渡されるまではパラメーターの型はわかりません。Python のメソッドも遅延バインディングですが、Java のポリモーフィック遅延バインディングとは異なります。少なくともオブジェクトの型は知っていますが、Python はパラメータの型を知りません。
テスト メソッドでは、1 つのパラメーターを受け取り、このパラメーターの prt メソッドを呼び出すことのみが規定されています。実行時に、このパラメータに prt メソッドがある場合、Python はそれを実行します。そうでない場合、abcde には prt メソッドがありますが、f にはないため、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。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

データの専門家として、さまざまなソースから大量のデータを処理する必要があります。これは、データ管理と分析に課題をもたらす可能性があります。幸いなことに、AWS GlueとAmazon Athenaの2つのAWSサービスが役立ちます。

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

質問:Redisサーバーバージョンを表示する方法は?コマンドラインツールRedis-Cli-versionを使用して、接続されたサーバーのバージョンを表示します。 Info Serverコマンドを使用して、サーバーの内部バージョンを表示し、情報を解析および返信する必要があります。クラスター環境では、各ノードのバージョンの一貫性を確認し、スクリプトを使用して自動的にチェックできます。スクリプトを使用して、Pythonスクリプトとの接続やバージョン情報の印刷など、表示バージョンを自動化します。

NAVICATのパスワードセキュリティは、対称暗号化、パスワード強度、セキュリティ対策の組み合わせに依存しています。特定の測定には、SSL接続の使用(データベースサーバーが証明書をサポートして正しく構成することを条件)、NAVICATの定期的な更新、より安全なメソッド(SSHトンネルなど)を使用し、アクセス権を制限し、最も重要なことは、パスワードを記録しないことです。
