Pythonプログラミングにおけるスーパー関数の正しい理解と使い方分析
Python2.2以前では、サブクラスが親クラスのメソッドを呼び出す必要がある場合、クラス名を使用して直接クラスのメソッドを呼び出し、つまり非バインドクラスメソッドを呼び出し、自身のオブジェクトselfを渡していました。パラメータとして。
class A(object): def say(self): print 'I am A' class B(A): def say(self): print 'I am B' A.say(self) b = B() b.say()
Output
I am B I am A
これはうまく機能しますが、親クラスの名前を変更すると、親クラスへの明示的な呼び出しを 1 つずつ修正する必要があります。子クラス 親クラスとの結合度が比較的高いクラスです。
そのため、ハードコーディングを回避し、親クラスの名前を気にする必要がないように、Python 2.2 の後に super() 関数が導入されました。
super() 関数を使用すると、上記のコードは次のように記述できます。
class B(A): def say(self): print 'I am B' super(B,self).say()
python3.0 以降、super() 関数はパラメーターを渡す必要がありません。つまり、上記のコード行を直接 super().say() にすることができます。
注意事項:
super は、新しいスタイルのクラスでのみ使用できます。
Super には多重継承の問題があります。サブクラスが複数の親クラスを継承する場合、super は最初の親クラスのメソッドを呼び出します。
親クラスメソッドを呼び出すこれら 2 つの方法を混合しないでください。アンバインド クラス メソッドを使用するか、両方ともスーパーを使用してください。そうしないと、呼び出されないか、複数回呼び出される可能性があります。
しかし:
スーパーについて考えるときに親クラスを考えないでください! super は MRO の次のクラスを指します。
スーパーというと親クラスを思い出しますが、これは初心者が犯しやすい間違いであり、当時の私も犯した間違いでした。
def super(cls, inst): mro = inst.__class__.mro() return mro[mro.index(cls) + 1]
2 つのパラメーター cls と inst はそれぞれ次の 2 つのことを行います:
1. inst は、cls を通じて現在の MRO 内のインデックスを検索し、mro[index + 1] を返します。 】
この2つはスーパーの本質です、必ず覚えておいてください!
MRO は Method Resolution Order の略で、クラスの継承順序を表します。
class Root(object): def __init__(self): print("this is Root") class B(Root): def __init__(self): print("enter B") # print(self) # this will printsuper(B, self).__init__() print("leave B") class C(Root): def __init__(self): print("enter C") super(C, self).__init__() print("leave C") class D(B, C): pass d = D() print(d.__class__.__mro__)
enter B enter C this is Root leave C leave B (,,,,)
super(B, self).__init__()
(
実際、これらすべてのロジックはまだ非常に明確です。重要なのは、super が何を行うかを理解することです。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。
