ホームページ >バックエンド開発 >Python チュートリアル >Lao Qi から Python を学ぶ、その他の詳細
ここ数日間、私はさまざまなチャネルを通じて数人の友人と OOP 関連の問題について話し合いました。彼らは、Linghu Chong、Frank、Jin Jian、Xiao Feng です
。OOP については人によって意見が異なります。いわゆる工学部と学術部では見解が異なります。アプリケーションの観点から、工学部の視点は推奨に値します。つまり、当面の問題を解決できる限り、内部でどのように機能するかにはあまり注意を払わないでください。しかし、学習者にとって、工学部のレベルにとどまっている場合(特に注意してください、上記の友達はすべて工学部の英雄です。彼らは単にそれを使用できるだけでなく、実際にはより高いレベルの「なしで勝つ」ことができます)トリック「トリックがあります」)、学習者は少しわかりにくいと感じるかもしれません。したがって、学習者、特に初心者は、内部的な理由をいくつか知っておく必要がありますが、内部的な理由を掘り下げるためだけにアプリケーションの目的を忘れないでください。両者の調整はまだ難しい課題のようだ。練習が深まるにつれて徐々に理解できるようになるので、心配しないでください。
以下に、MARK Lutz の「Learning Python」の「OOP in the Eyes of the Master」に基づいて、OOP を使用する一般的な理由をいくつかリストします。
•コードの再利用。これは非常に簡単です (これが OOP を使用する主な理由です)。継承をサポートすることにより、クラスではプロジェクトを毎回最初から開始するのではなく、カスタマイズを通じてプログラミングできるようになります。
•カプセル化。実装の詳細をオブジェクト インターフェイスの背後にラップすることで、コード変更によるユーザーへの影響を分離します。
•構造。クラスは新しいローカル スコープを提供し、変数名の競合を最小限に抑えます。また、実装コードを作成および検索したり、オブジェクトの状態を管理したりするための自然な場所も提供します。
●メンテナンス性。クラスは自然にコードの分解を容易にするため、冗長性を減らすことができます。クラス構造とコードの再利用がサポートされているため、一度に変更する必要があるコードのコピーは 1 つだけです。
•一貫性。クラスと継承は共通のインターフェイスを実装できます。このようにして、コードの外観と外観が統一されるだけでなく、コードのデバッグ、理解、保守が簡素化されます。
•ポリモーフィズム。ポリモーフィズムにより、コードがより柔軟になり、幅広く適用できるようになります。 (これは OOP の特性のようであり、それを使用する理由ではありません)
何はともあれ、授業はとても大切なものであり、読者は勉強する際に授業をもっと活用しなければなりません。
また、python2には先ほどのクラスに相当する「new-style」というものがあり、先ほどのクラスは「classic」種類と呼ばれます。ただし、Python3 ではそのような違いはなく、両者は統合されています。 Python2 では、この 2 つには違いがあるというだけです。このチュートリアルの基本的な部分では、新しい形式の問題についてはまだ教えていません。読者が興味がある場合は、GOOGLE で関連情報を検索することも、コースが次の段階に進むにつれてさらに学習することもできます。
バインドされたメソッドとアンバインドされたメソッド
クラス メソッドを学習したときに、クラス メソッドは関数であると述べたことをまだ覚えているかどうかを確認してください。ただし、この関数の動作は、以前に学習した関数 (self など) とは少し異なります。もちろん、その必要はありません。以下を見てみると、自己が存在しないことがわかります。メソッドは関数と同じであり、本質的に関数であるため、関数の部分を学習すると、関数はオブジェクトであるため、クラス メソッドもオブジェクトであることが明確になります。先ほども述べたように、クラスメソッドの中にはselfを持つものと持たないものがあります。区別するために、この定義はさらに行われます:
•バインドされたクラスメソッドオブジェクトがありません: self
がありません
•バインドインスタンスメソッドオブジェクト:self
を使用
バインドされたインスタンス メソッド オブジェクトを呼び出します
次の方法でインスタンス メソッドを呼び出すことができます
このインスタンス メソッドが呼び出されたときのデータ転送プロセスは、「クラスの書き方 2 つ目」で示されています。図は、上記の呼び出しメソッドで、インスタンス名 a が実際に self に渡されていることを示しています。バインドされたインスタンス メソッド オブジェクトを self で呼び出します。
上記の呼び出しプロセスは次のように実装することもできます:
上記の呼び出しでは、実際には前の呼び出しプロセスの分解アクションに相当します。つまり、インスタンス a とメソッド関数 foo をバインドし、それを x に代入します。このとき、x は単純な関数に相当し、上記のメソッドを通じてパラメータを渡すことができます。ここでインスタンスとメソッド関数をバインドする方法は、ドット演算 (object.method_function) を使用することです
非バインドクラスメソッドオブジェクトを呼び出す
いわゆるクラス メソッド オブジェクトはインスタンスを使用せず、クラスを使用してドット表記操作を実行し、メソッド関数 (ClassName.method_function) を取得します。
このような呼び出しでは、バインドされていないメソッド オブジェクトが生成されます。ただし、次のように、呼び出し時にインスタンスを最初のパラメーターとして渡す必要があります。
に特に注意してください。
ドキュメント文字列
プログラムを書くとき、必要なテキストの説明を書かなければなりません。コードが非常に理解しやすく、特にさまざまな変数、関数、クラスなどの名前が誰でも簡単に理解できるものでなければ意味がありません。そうでない場合は、書面による指示が不可欠であることをご理解ください。
関数、クラス、またはファイルの先頭にドキュメント文字列の説明を記述します。通常は三重引用符を使用します。この方法で記述する最大の利点は、help() 関数を使用して確認できることです。
"""これは関数です。"""
パス
"""これは私のクラスです。"""
Def my_method(self,arg):
"""これは私の方法です。"""
パス
もちろん、プログラミングではコメントに「#」記号が使用される場所がたくさんあります。これは通常、パーツに注釈を付けるために使用されます。
実際には授業は終わっていませんが、この講義はここで終了です。公式の文章を読むにはさらに練習が必要です。