Python で学ぶオブジェクト指向のclassの使い方
ある程度大きなプログラムを書こうと思ったとき、プログラミングにアプローチを決める必要があります。
アプローチとして有名なのは、命令型のC言語、関数型はScala、オブジェクト指向はRubyやJavaといわれています。Pythonでは関数型とオブジェクト指向をサポートしています。
Pythonでオブジェクト指向プログラミングするときに気をつけるべきポイントとオブジェクト指向について解説します。
▽関連記事はこちら
オブジェクト指向をPythonで行う理由とは
オブジェクト指向言語と言えば、JavaやRubyを思い浮かべる人も多いのではないでしょうか。
また、Pythonを習得するのであれば、流行の関数型でやるのが良いのでは?考える人も多いのではないかもしれません。
オブジェクト指向とは、クラス(class)と呼ばれるオブジェクトの設計図とそれに基づく実際のデータであるインスタンスによって形成されます。
クラスで作成したオブジェクトのインスタンスは外部から変更できないようにすることも可能です。
オブジェクト指向には次の4つの要素が存在しています。
・カプセル化
・抽象化
・ポリモーフィズム
・継承
PythonではJavaやRubyのように上記の4つの要素全てを提供しています。
カプセル化
カプセル化とは次のような特徴があり、オブジェクト指向プログラミングの最も特徴的な要素です。
・クラス(オブジェクト)ごとに、変数とメソッドをまとめられる
オブジェクトごとにクラスが存在し、個々のオブジェクトではなくおおもとのクラスについてのデータや処理をまとめて扱うというのがオブジェクト指向プログラミングの特徴のひとつです。
・データをクラス内に書き、外から見えないようにする。
クラスによって設計されてインスタンスによってオブジェクトの変数やメソッドを外部から操作できなくすることもカプセル化の重要な役割です。
Rubyなどではプライベート変数や、プライベートメソッドを作って外部からのアクセスをできないようにしていますが、Pythonは全てのデータが操作できる言語です。
そのため、クラスの外から変更されたくないデータに関しては、変数名とメソッド名の前に「_」(アンダースコア)をプログラマーが追加する事によってクラスの外部から触ってはいけない変数やメソッドを識別できるようにします。
抽象化
抽象化はクラスを作成する際に、必要な属性を選択する事ができることを言います。
たとえば、車というクラスを作るときには、「メーカー、車名、排気量、グレード、色、装備、タイヤのサイズ……」という多くの属性を持ちますが、クラスで定義する変数やメソッドは、必用な物に限れば良いという考え方です。
ポリモーフィズム
ポリモーフィズムは、多様性などと訳されることが多いようです。例として、print文が整数や文字列など多彩なデータを扱うことができるということを例にあげる場合も多いかと思います。
もう少し実際に即した形で説明すると、別のクラスにインスタンスとして同じ名前を持つ変数やメソッドがあった場合、ポリモーフィズムが無い場合には別の物として別々に扱わなければなりません。
しかし、ポリモーフィズムがあることによって、別のクラスのインスタンスであっても同じ物として扱うことができるということなのです。自動車クラスでもオートバイクラスでも自転車クラスでも「タイヤ」は「タイヤ」として扱うことができるということです。
継承
継承とは、クラス同士に親子関係を持たせることができるものです。子となるクラスは親のクラスの変数やメソッドを利用することができます。
また、子クラスは独自の変数やメソッドを作成することが可能ですが、子クラスで作成した変数やメソッドは親クラスに影響しません。
クラスを使ったオブジェクト指向プログラミングはJavaやRubyが有名ですが、Pythonでも十分に可能です。
Pythonでクラスの使い方を習得して更にプログラミングの幅を広げてみませんか?
▽関連記事はこちら
▼キャパの公式Twitter・FacebookではITに関する情報を随時更新しています!