Pythonは、クラス(class)とオブジェクト(object)を使用して、オブジェクト指向プログラミング(OOP)プログラミングを実行します。
オブジェクト指向の主な目的は、プログラムの再利用性を向上させることです。私たちがオブジェクト指向プログラミングにこれほど早くから取り組んだ理由は、Python の概念全体がオブジェクトに基づいているためです。 OOP を理解することが、Python をさらに学習するための鍵となります。 以下は分類に基づいたオブジェクト指向の理解です。 似たものはカテゴリに分類される 人間の認知では、物事はその属性の類似度に応じて分類され、カテゴリに名前が付けられます。たとえば、鳥の共通の属性は、羽毛があり、卵を産んで子孫を残すということです。特定の鳥はすべて、鳥の原型に基づいています。
オブジェクト指向は、上記の人間の認知プロセスをシミュレートします。 Python 言語では、格好良く聞こえるように、上記の「もの」をオブジェクトと呼びます。 最初に鳥を定義しますclass Bird(object): have_feather = True way_of_reproduction = 'egg'Bird というカテゴリ (クラス) を定義します。このアナロジーに属するステートメント ブロックでは、2 つの サマーという名前のひよこを育てるとします。それは物体であり、鳥に属します。前に定義したクラスを使用します:
summer = Bird() print summer.way_of_reproduction最初の文
を通してオブジェクトを作成し、夏がbirdというカテゴリのオブジェクトであり、その属性への参照がobject属性を通じて行われることを説明します。 (オブジェクト.属性)。
可哀想な夏、あなたは単なる毛むくじゃらの卵製品で、とても繊細です。 アクション 日常の認知において、属性を通じてカテゴリーを識別するとき、私たちはこのものが何ができるかに基づいてカテゴリーを区別することがあります。たとえば、鳥は動きます。このようにして、鳥は家というカテゴリーから区別されます。これらのアクションは、位置の変更につながる動きなど、特定の結果をもたらします。 これらの「behavior」属性の一部はメソッドです。 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
を追加しました。 (このメソッドが愚かであることは認めます。次の講義を読んだ後で、より興味深いメソッドを定義できます。) (パラメータには self があり、オブジェクト自体を参照しやすくするためのものです。メソッドを使用するかどうかに関係なく、self でなければなりません。self に関する内容は次の講義で展開します)
他の 2 つのパラメーター dx、dy は、x 方向と y 方向に移動した距離を表します。 move メソッドは最終的に計算された位置を返します。
最終的に move メソッドを呼び出したとき、dx と dy の 2 つのパラメーターを渡すだけであり、self パラメーターを渡す必要はありませんでした (self は内部使用のみのため)。
私の夏は準備ができています。
サブカテゴリ
たとえば、鳥はさらに鶏、雁、コウライウグイスに分類できます。
OOP では、上記の概念を
inheritance(継承) を通して表現します。 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
以上がオブジェクト指向 Python の基本概念の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。