Python はクラスとオブジェクトを使用してオブジェクト指向プログラミング (OOP) を実行します。
オブジェクト指向の主な目的は、プログラムの再利用性を向上させることです。私たちがこれほど早くからオブジェクト指向プログラミングに取り組んだ理由は、Python の概念全体がオブジェクトに基づいているためです。 OOP を理解することが、Python をさらに学習するための鍵となります。
以下は分類に基づいたオブジェクト指向の理解です。
類似した物体はカテゴリに分類される
人間の認知では、物体は類似した属性に従って分類され、カテゴリに名前が付けられます。たとえば、鳥の共通の属性は、羽毛があり、卵を産んで子孫を残すということです。特定の鳥はすべて、鳥の原型に基づいています。
オブジェクト指向は、上記の人間の認知プロセスをシミュレートします。 Python 言語では、格好良く聞こえるように、上記の「もの」をオブジェクトと呼びます。
まず鳥を定義します
class Bird(object): have_feather = True way_of_reproduction = 'egg'
Birdというカテゴリ(クラス)を定義します。このアナロジーに属するステートメント ブロックでは、2 つの変数を定義します。1 つは羽 (have_feather)、もう 1 つは再生方法 (way_of_reproduction) です。これら 2 つの変数は、先ほど述べた属性に対応します。括弧とその内容については、当面は説明を省略し、問1とさせていただきます。
サマーという名前のひよこを育てるとします。それは物体であり、鳥に属します。前に定義したクラスを使用します:
summer = Bird() print summer.way_of_reproduction
最初の文でオブジェクトを作成し、夏がbirdというカテゴリのオブジェクトであり、その属性への参照がオブジェクトを通じて行われることを説明します。 .property (オブジェクト.属性)。
可哀想な夏、あなたは単なる毛むくじゃらの卵製品で、とても繊細です。
アクション
日常の認知において、属性を通じてカテゴリーを識別するとき、私たちはこのものが何ができるかに基づいてカテゴリーを区別することがあります。たとえば、鳥は動きます。このようにして、鳥は家というカテゴリーから区別されます。これらのアクションは、位置の変更につながる動きなど、特定の結果をもたらします。
そのような「動作」属性の一部はメソッドです。 Python では、クラス内に関数を定義することでメソッドを記述します。
class Bird(object): have_feather = True way_of_reproduction = 'egg' def move(self, dx, dy): position = [0,0] position[0] = position[0] + dx position[1] = position[1] + dy return position summer = Bird() print 'after move:',summer.move(5,8)
私たちは鳥のカテゴリーを再定義しました。 Bird には、動きを表すメソッド move という新しいメソッド属性が追加されました。 (このメソッドが愚かであることは認めます。次の講義を読んだ後で、より興味深いメソッドを定義できます。)
(パラメータには self があり、オブジェクト自体を参照しやすくするためのものです。メソッドを使用するかどうかに関係なく、self でなければなりません。self に関する内容は次の講義で展開します)
他の 2 つのパラメーター dx、dy は、x 方向と y 方向に移動した距離を表します。 move メソッドは最終的に計算された位置を返します。
最終的に move メソッドを呼び出したとき、dx と dy の 2 つのパラメーターを渡すだけであり、self パラメーターを渡す必要はありませんでした (self は内部使用のみのため)。
私の夏は準備ができています。
サブカテゴリ
カテゴリ自体はさらにサブカテゴリに細分化できます
たとえば、鳥はさらに鶏、雁、コウライウグイスに分類できます。
OOP では、継承を通じて上記の概念を表現します。
class Chicken(Bird): way_of_move = 'walk' possible_in_KFC = True class Oriole(Bird): way_of_move = 'fly' possible_in_KFC = False summer = Chicken() print summer.have_feather print summer.move(5,8)
新しく定義された Chicken クラスには 2 つの属性が追加されました: 移動方法 (way_of_move)、KFC に見られる可能性があります (possible_in_KFC)
クラスを定義するとき、括弧は Bird です。これは、Chicken が Bird のサブクラスであること、つまり、Chicken が Bird から継承していることを示しています。当然のことながら、Bird は Chicken の親クラスです。ニワトリはバードのすべての特性を享受します。 Summer は Chicken クラスであると宣言しただけですが、親クラスの属性を継承 (変数属性 have_feather であれメソッド属性 move であれ) を通じて享受します
新しく定義された Oriole (オリオール) クラスも Birds から継承しています。コウライウグイス オブジェクトを作成すると、そのオブジェクトには自動的に鳥のプロパティが設定されます。
継承システムを通じて、プログラム内で繰り返される情報や繰り返しのステートメントを減らすことができます。鳥から継承せずに 2 つのクラスを個別に定義する場合は、鳥の属性をそれぞれ鶏クラスとコウライウグイスの定義に入力する必要があります。プロセス全体が退屈になる可能性があるため、オブジェクト指向によりプログラムの再利用性が向上します。
(質問1、括弧内のオブジェクトに戻ります。括弧がオブジェクトの場合、このクラスには親クラスが存在しないことを意味します(終了))
世界を理解するために、人類の祖先から始めて、私たちはさまざまなものを分類しますオブジェクト指向は人間の思考習慣と一致しています。いわゆるプロセス指向、つまり 1 つのステートメントを実行してから次のステートメントを実行するのは、どちらかというと機械的な思考です。オブジェクト指向プログラミングを通じて、私たちの思考における複雑なアイデアをより便利に表現できるようになります。
概要
属性に従って物事を分類する(オブジェクトをクラスとして分類する)
メソッドはアクションを表す属性です
親クラスとサブクラスの関係を説明するには継承を使用します。サブクラスは、親クラスのすべてのプロパティを自動的に持ちます。
selfはクラス定義に基づいて作成されたオブジェクトを表します。
オブジェクトを作成します: object name = class name()
オブジェクトの属性を参照します: object.attribute