python-オブジェクト向けの基本概念

5046 ワード

Pythonはクラス(class)とオブジェクト(object)を用いて,オブジェクト(object-oriented programming,略称OOP)向けのプログラミングを行う.
オブジェクト向けの最も主要な目的は,プログラムの重複使用性を向上させることである.私たちがこんなに早くオブジェクト向けのプログラミングに切り込んだのは、Pythonの概念全体がオブジェクトに基づいているからです.OOPを知ることはPythonをさらに学ぶ鍵です.
次に,分類に基づいてオブジェクト向けの理解を示す.
 
類似オブジェクト、クラスに分類
人間の認知では,属性に近いものを分類し,カテゴリに名前を付ける.例えば、鳥類の共通の属性は羽毛があり、産卵によって子孫を産むことである.どの特別な鳥も鳥の原型に基づいている.
対象は以上の人間の認知過程をシミュレートしたものである.Python言語では、クールに聞こえるように、上記の「もの」を対象(object)と呼びます.
 
鳥類を定義する
class Bird(object): have_feather = True way_of_reproduction = 'egg'

鳥(Bird)というカテゴリを定義しました.このクラス比に属する文ブロックでは,羽毛(have_feather)と生殖方式(way_of_reproduction)の2つの変数を定義し,この2つの変数は先ほど述べた属性(attribute)に対応する.私たちはしばらく括弧とその内容を説明しないで、問題1と記入します.
 
もし私がニワトリを飼っていたら、summerと申します.オブジェクトであり、鳥類に属しています.前に定義したクラスを使用します.
summer = Bird() print summer.way_of_reproduction

最初の文でオブジェクトを作成し、summerがカテゴリ鳥のオブジェクトであることを説明すると、summerには鳥のクラス属性があり、属性への参照はオブジェクトを通過する.プロパティ(object.attribute)の形式で実現されます.
 
かわいそうなsummer、あなたは毛のある卵の商品で、精緻ではありません.
 
アクション
日常認識では,属性認識カテゴリを通過する際に,これが何ができるかによってカテゴリを区別することがある.例えば、鳥は移動します.これで、鳥は家のカテゴリと区別されます.これらの動作は、移動による位置の変化など、一定の結果をもたらします.
このようないくつかの「動作」属性はメソッドです.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)

鳥というカテゴリを再定義しました.鳥の新しいメソッド属性は、移動を表すメソッドmoveです.(私はこの方法が馬鹿だと認めています.次の話を見てから面白い方法を定義することができます)
(そのパラメータにはselfがあります.これはオブジェクト自体を参照するのに便利です.メソッドの最初のパラメータはselfでなければなりません.使用するかどうかにかかわらず.selfに関する内容は次の説明で展開されます).
 
他の2つのパラメータ,dx,dyはx,yの2つの方向に移動する距離を表す.moveメソッドは最終的に演算されたpositionを返します.
最後にmoveメソッドを呼び出すとき,dxとdyの2つのパラメータのみを渡し,selfパラメータを渡す必要はなかった(selfは内部でのみ使用されるため).
 
私のsummerは走ることができます.
 
サブクラス
カテゴリ自体をさらにサブクラスに細分化することもできます
 
例えば、鳥類は鶏、雁、イチョウにさらに分けることができます.
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の親です.ChickenはBirdのすべての属性を有します.summerは鶏類であることを宣言しただけですが、変数属性have_featherでもメソッド属性moveでも親の属性を継承することによって享受されます.
 
新たに定義されたコウノトリ(Oriole)類は、鳥類から受け継がれている.イチョウオブジェクトを作成すると、そのオブジェクトは自動的に鳥のプロパティを持ちます.
 
継承制度により,プログラム内の重複情報と重複文を減らすことができる.鳥類から継承せずに2つのクラスをそれぞれ定義する場合は、鳥類の属性を鶏類とイチョウ類の定義にそれぞれ入力する必要があります.プロセス全体が煩雑になるため、オブジェクト向けにプログラムの再利用性が向上します.
(質問1に戻ると、カッコ内のobjectは、カッコ内がobjectの場合、このクラスに親がいないことを示します(先頭に立っています))
 
いろいろなものを分類して、世界を理解し、人類の祖先から、私たちはこの認知過程を練習して、対象に向かって人間の思考習慣に合っています.プロセス向けとは,一つの文を実行してから次の文を実行することであり,より多くは機械的思考である.オブジェクト向けのプログラミングにより、思考の複雑な考えをより便利に表現することができます.
 
まとめ
物を属性に基づいて分類する(objectをclassにまとめる)
方法は1種の属性で、動作を表します
親-子の関係を継承で説明します.子クラスは、親クラスのすべての属性を自動的に持ちます.
selfは、クラス定義に基づいて作成されたオブジェクトを表します.
 
オブジェクトの作成:オブジェクト名=クラス名()
参照オブジェクトのプロパティ:object.attribute