こんにちわ!この記事はPythonの初学者のための内容となっております。
今回は、Pythonのオブジェクト指向について学習していきましょう!
- オブジェクト指向ってなに!?
- 使い方は?
- これは何がうれしいの?
って方向けの内容となっています。
また、前回の内容の知識も必要なので確認してみてください!
前回の記事
頑張っていこう!
プログラミングスクールに関しては下の記事で詳しく記述しています。
こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。
コンテンツ
Let’s practice a little!!
オブジェクト指向とは
オブジェクト指向とは、値やデータを、一つのオブジェクトとして扱う考え方です。
前回の記事にも書きましたが、オブジェクト指向は、人間のために考えられた、プログラムを組む時の煩雑さを解決するための方法で、「人間が把握できるようにするためのプログラム開発」を実現しようというものです。
やっぱり難しい。
大量のコードを記述することになると、クラスや関数を用いて、処理を分解したとしても全体を把握するのは大変です。今回学習するオブジェクト指向を学べば、それらの問題も解決するでしょう。
オブジェクト指向の考え方
今までのプログラミングとは性質が違いますので考え方の違いを例をもとに見ていきます。
1 2 3 4 5 6 7 8 |
#手続き型プログラミング a = 0 a = a + 3 a = sum(a + 6) #オブジェクト指向型プログラミング a.sum(3) a.sum(6) |
初めての方は何が言いたいのかいまいちよくわからないと思います。
今までのプログラミングは手続き型プログラミング、プロセス指向とも呼ばれます。これは、処理の手順を順番に考え、プログラムの最初から命令を記述していく方法です。
一方で、オブジェクト指向型プログラミングでは、いきなり処理をするプログラムを書き始めるようなことはせずに、全体を眺め、細分化していくことを優先します。
上記の例では、実行してもエラーが出るのですが、「a」というオブジェクトを生成し、そのオブジェクトに関しての命令を実行する流れになっています。
Let’s practice more!!
コンストラクタとメンバ変数
カタカナ多すぎワロタ!
コンストラクタやメンバ変数について知る前に、クラスの定義の方法を再確認していきます。
1 2 3 4 |
class Human: pass p = Human() |
上記の「p」は「person」の「p」と考えてください。この「p」はインスタンスと呼ばれ、後述しますが、インスタンスには、それぞれに変数や、そのオブジェクトを表す性質として、メンバ変数というものを定義することが出来ます。
例えば、人間であれば、名前や年齢、性別などです。
実際に定義する方法を見ていきます。
1 2 3 4 5 6 7 8 |
class Human: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def jump(self): print(self.name + "さんが飛んだ。") |
関数「 __init__ 」というものがコンストラクタです。これは、オブジェクトが生成されたときに一度だけ実行される関数です。その引数である、「name」、「age」、「gender」が今回のメンバ変数です。「Human」が持つ性質を表現しています。
このコードで何度も出てきている「self」とは、生成されたオブジェクト自身を表します。ですので、コンストラクタの中の意味を日本語で解釈すると、「自分自身のもつ「name」という性質には、受け取った「name」で保存する」といった感じになります。
関数「jump」では、自分自身の「name」という保存された性質が利用されています。なんとなく雰囲気はつかめたでしょうか?
インスタンス
次にインスタンスを見ていこう!
1 2 3 4 5 6 7 8 9 10 11 12 13 |
p1 = Human("山田", "21", "男") p2 = Human("太郎", "22", "女") for p in [p1, p2]: print(p.name + "さんは" + str(p.age) + "歳" + p.gender + "性です。") p1.jump() """ 山田さんは21歳男性です。 太郎さんは22歳女性です。 山田さんが飛んだ。 """ |
「p1」、「p2」がインスタンスと呼ばれるものです。「Hunan」クラスの引数に、メンバ変数である「名前」、「年齢」、「性別」を設定します。これによって、各オブジェクトごとに性質を定義できるようになるわけです。
この書き方がすごいと感じる方はすごいぞ!笑
何が言いたいかというと、いちいち設定した性質を受け取る必要がなく、インスタンスから性質を参照できちゃうことです。これによって、大量のクラスや関数からいちいち適切なコードを探す手間が省けるためとても便利なんですよ!
何気なく生成したインスタンスをリストにまとめていますが、このような書き方も可能です。リストは、型が同じであれば「for」文などと組み合わせてまとめて処理ができるので便利ですね!
オブジェクト指向の基本
ここまでを復習します。
オブジェクト指向とは、プログラムを組む時の煩雑さを解決するための方法でこの考え方のキーワードは「コンストラクタ」、「メンバ変数」そして、「インスタンス」でした。コンストラクタの関数名は、「 __init__ 」と決まっていて、一度だけ実行されます。そして、「slef」の意味はオブジェクトの性質を表し、設定するためには、メンバ変数を定義する必要がありました。
オブジェクト指向を理解することで、プログラム全体を把握しやすくなるといったメリットがあるので頑張っていきましょう。
流れはわかったゾ!
Today’s final practice!!
まとめ
今回は、オブジェクト指向についての内容でした。前回のクラスの説明は、似たような関数を一つにまとめるために利用すると記述しましたが、オブジェクト指向型プログラミングをするうえでクラスは基本となる構文です。
「オブジェクト」、「クラス」、「コンストラクタ」、「メンバ変数」、「インスタンス」。カタカナが多いですが、慣れればある程度はマスターできます。これからも頑張っていきましょう!
本日の理解度調査
今日の最後に理解度調査をします!!
どうすれば正しくなるのか考えてみてね!!
Q. 犬3匹は喧嘩し、猫5匹は仲良しになるようにインスタンスを生成せよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class Animal: def __init__(self, name, num): self.name = name self.num = num def Fight(self): print(self.name + str(self.num) + "匹が喧嘩した。") def Friend(self): print(self.name + str(self.num) + "匹は仲良しだ。") dog = ??? cat = ??? dog.Fight() #犬3匹が喧嘩した。 cat.Friend() #猫5匹は仲良しだ。 |
正解は。。。
1 2 |
dog = Animal("犬", 3) cat = Animal("猫", 5) |
わかったかな??正解出来たら今回の項目は完璧だね!!