初学者向け-Python3|クラスの定義方法とオブジェクト指向の習得法

By | 2019年4月23日

1、Python3でオブジェクト指向開発をするには?

まずはオブジェクトの設計図にあたるクラスを定義する方法を習得する。そしてクラスからインスタンスを生成する方法を学ぶ。Java等に慣れ親しんでいる方は、最初、少しだけ、Pythonのクラス定義の方法にとまどうかもしれない。

というのもPythonのクラス内にメンバ変数(objectの属性)を定義するには、下記のように、特殊な初期化メソッドを用いる必要があるからだ。

 

def __init__(self, p, z):

    self.price = p
    self.zaiko = z

 

この段階で上記コードの文法的意味を理解する必要はない。
この記事を読み進めれば自ずと、しかも簡単に、その意味が理解できるようになるだろう!

※注意※[初学者向けアドバイス]*急がば回れ*

プログラミング初学者によくある勘違いは、オブジェクト指向の文法をマスターしさえすれば、オブジェクト指向プログラミング(以下:OOPと略す)ができるようになるという誤解だ。「クラス」はオブジェクト指向プログラミングを習得する上で絶対に知っておくべき文法であるが、しかし、クラスの文法を完全にマスターしてもオブジェクト指向開発ができるようにはならない。

オブジェクト指向開発のノウハウを学ぶにはJava言語が適している。
せっかくPythonを学ぶ気になったのに、他の言語にまで手数料を出したくない。
そんな風に思われるかもしれないが、「急がば回れ」!

Javaでしっかりとオブジェクト指向をマスターした上で、Pythonに戻ることこそ、
Python, JavaScript, PHPといった言語でOOPを使いこなせるようになる、
最短コースであり最善策なのだ!

一見すると遠回りのように見えるが、オブジェクト指向の文法を勉強し続けても、OOPは身につかないのだから、下記にて紹介する書籍を是非、購入して読まれることを強くお勧めする。

これから紹介する書籍は、単に、Java言語の文法を親切にわかりやすくまとめただけの書籍ではない。もちろん分かりやすくJavaの文法解説はしてくれる。だがJavaの文法を身に着けたいだけなら、ネットの情報で十分だ!筆者オススメのJava本(とOOPを学べる本)は以下の2冊だ。

さすがに2冊も買えない!という事情であれば①『新わかりやすいJava オブジェクト指向徹底解説』だけでもOOPを、ある程度、習得することができるだろう!

 

↑↑↑この書籍はJavaの文法を一通り理解していないと、読みこなすのは困難だ。
その場合下記の「スッキリわかるJava入門 第2版 (スッキリシリーズ)」を買うか、
WEB上の解説サイトで基礎文法を学習しよう!

 

②「スッキリわかるJava入門 第2版 (スッキリシリーズ)

Java言語の基本文法に不安があれば、この本でまず文法面の足固めをするといい。確かにこの本は良書でAmazonでもベストセラーだが、お金をかけずに学びたいのあれば、ネット上のJava解説サイトで勉強してもいいだろう!

2、Python3におけるクラスとは

クラス設計図である。故にクラスを定義しただけでは、それをプログラムの部品として実際に利用することはできない。飛行機の設計図が空を飛ばないのと同じだ。設計図を元に「実際に使えるオブジェクト(=部品)」を生成する必要がある。設計図を元に作られたオブジェクトをインスタンスと呼ぶ。インスタンスは「具体化されたモノ」と理解するといい。ワープロソフトで作った文章を設計図(class)に例えると、プリントアウトされた文章がインスタンスだ。また、例えば、Python3における整数の「1」は「intクラス」のインスタンスであり、「実際に使えるオブジェクト」である

★全ての「オブジェクト」は、なんらかのclassから生み出された「インスタンス」である。

3、クラスを定義するための文法

次の点に注意が必要。

クラス名は大文字から始まりキャメルケースで記述する。

【クラス名の良い例】

  • Apple
  • OrangeJuice
  • WindowsPc

【クラス名の悪い例】

  • apple
  • orange_juice
  • windows-pc

また、クラス名の直後に(:)をつけるのを、うっかり忘れないよう留意すべし。

4、最も原始的なクラスとインスタンス

以下では、なんの内容も持たないクラスとしてTestを定義し、このTestクラスのインスタンス(=オブジェクト=部品)を生成する。実用性は皆無だがPythonにおけるクラスの文法の理解には役立つ。

インスタンスにはアトリビュートという機能がある。これはインスタンス内にデータを格納できる変数のようなものだ。ちなみにアトリビュートは「属性」を意味する。例えば上記のコードに続いて、

アトリビュートは、クラスにはなんの影響も与えない。個別のインスタンスにのみ有効だ。例えば以下のコードはエラーになる。

「t1」、「t2」はそれぞれ、別個の、Testクラスのインスタンスだ。「t1」にはアトリビュート「val」に100を代入しているが、インスタンス「t2」は、何もデータを持っていない。故に、print()しようとするとエラーになる。

1つのクラスからたくさんのインスタンスを作るならば、クラスを定義する段階で、アトリビュートも設計図に組み込んでおけばいい。全てのインスタンスに共通するアトリビュート(属性)をクラスで定義するには、メソッドを利用する。

5、属性を持ったクラスを定義する

例えば「商品(product)クラス」にアトリビュート(つまり”属性”を意味するインスタンス変数)として「価格(price)」と「在庫数(zaiko)」を持たせたい場合は次のように書く。

__init__(self)はアトリビュート(属性、インスタンス変数)を定義する際に用いる特殊メソッドだ。これは同時に初期化メソッドでもある。

selfはインスタンスそのものを指し示す特別な引数だ。

selfを使えばインスタンスそのものを操作できる。

ちなみに、def__init__()の間に「半角スペース」を入れるのを忘れないようにしよう。

そして忘れてはいけない重要なポイントは、Pythonのクラスで引数をとるメソッドを定義する際は、必ず第1引数に「self」を指定するというルールだ。

6、属性とメソッドを持ったクラスを定義する

次のサンプルコードでは税込み価格を返すtax()メソッドを追加しています。

Productクラスのインスタンスを生成する際は、selfを除いて引数がi,p,zと指定されているので、
初期化メソッドには3つの引数(id, price, zaiko)を渡さなければ、ERRORになってしまう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA