オブジェクト指向について: 基本

なぜpythonは数値とかですらオブジェクトと呼べるのか

よく「pythonはどんな数値、変数、関数であってもオブジェクトと呼べる」というような話がある。一方で、オブジェクト志向とはclassからinstanceを取り出し、classで使用されている関数(メソッド)を使い回せるようにする、などと定義されていることもある。数値はclassもinstanceもこちらは全く宣言していないのに、なぜオブジェクトと呼べるのか気になっていた。例えば、以下。

こうするとnumのattribute(属性)が確認でき、その中には、numeratorとかreadとかがある。その他にも耳馴染みのない属性が並ぶ。ここでnumのイメージ。

こんな感じ。つまり、integerクラス(type)から生成したinstance(ここではnumのような数字)はnumeratorやreadというメソッドを用いることができるわけだ。ここで僕らユーザーが使えるものをpublicな属性、裏側で動いてるだけで僕らからは見えなくなっているものをprivateな属性と呼ぶ。また、ここでメソッドはかならずattribute(属性)と呼べるが、attribute(属性)は必ずしも毎回メソッドと呼べるわけではない。numに代入されている8という数値もまた属性と呼べるからである。メソッドはcallable methodとも呼ばれる(つまり、呼び出し可能なメソッド)。

モジュールとクラス

モジュールとはコードを含むファイルのことで、クラスとはその中身にあるもの。上記で示しているように、class…から始まる塊がクラス。モジュールはそれをたくさん含むようなイメージ。新しくコードを書くときにモジュールをインポートし、その中のクラスをインポートすることで具体的なインスタンスを作れたり、モジュール内部の関数を再利用できたりする。

コンストラクタ

クラスからインスタンスを生成する際に必ず最初に呼び出される関数(メソッド)のこと。pythonの場合は、__init__から始まるメソッドが必ず最初に呼び出される。イメージとして、車の色、スピード、エンジン音、からなる車classがあったとき、3つの別々のインスタンスを生成したい。最初に車の色が決まらないと車の違いを判別できないとする。このとき__init__の中で色を決めるコードを書いておけば、必ずインスタンスが生成されるときには色が指定された状態になる。

selfの役割

pythonのメソッドでは必ず一つの引数を持つが、その最初の引数は必ずselfになる。selfはオブジェクト自身のIDを取得するもので、例えば、self.nameなどでそのオブジェクト自身の名前を定義できたりする。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする