2019年4月23日0件のコメント[目次]この記事のコンテンツ一覧1、Python3でオブジェクト指向開発をするには?※注意※[初学者向けアドバイス]*急がば回れ*2、Python3におけるクラスとは3、クラスを定義するための文法4、最も原始的なクラスとインスタンス5、属性を持ったクラスを定義する6、属性とメソッドを持ったクラスを定義する1、Python3でオブジェクト指向開発をするには?まずはオブジェクトの設計図にあたるクラスを定義する方法を習得する。クラスからインスタンスを生成する方法を学ぶ。Java等に慣れ親しんでいる方は、最初、少しだけ、Pythonのクラス定義の方法にとまどうかもしれない。いうのもPythonのクラス内にメンバ変数(objectの属性)を定義するには、下記のように、特殊な初期化メソッドを用いる必要があるからだ。zこの段階で上記コードの文法的意味を理解する必要はない。この記事を読み進めれば自ずと、しかも簡単に、その意味が理解できるようになるだろう!※注意※[初学者向けアドバイス]*急がば回れ*プログラミング初学者によくある勘違いは、オブジェクト指向の文法をマスターしさえすれば、オブジェクト指向プログラミング(以下:OOPと略す)ができるようになるという誤解だ。「クラス」はオブジェクト指向プログラミングを習得する上で絶対に知っておくべき文法であるが、しかし、クラスの文法を完全にマスターしてもオブジェクト指向開発ができるようにはならない。オブジェクト指向開発のノウハウを学ぶにはJava言語が適している。Pythonを学ぶ気になったのに、他の言語にまで手数料を出したくない。最短コースであり最善策なのだ!一見すると遠回りのように見えるが、オブジェクト指向の文法を勉強し続けても、OOPは身につかないのだから、下記にて紹介する書籍を是非、購入して読まれることを強くお勧めする。これから紹介する書籍は、単に、Java言語の文法を親切にわかりやすくまとめただけの書籍ではない。分かりやすくJavaの文法解説はしてくれる。Javaの文法を身に着けたいだけなら、ネットの情報で十分だ!筆者オススメのJava本(とOOPを学べる本)は以下の2冊だ。オブジェクト指向徹底解説』だけでもOOPを、ある程度、習得することができるだろう!↑↑↑この書籍はJavaの文法を一通り理解していないと、読みこなすのは困難だ。(スッキリシリーズ)」Java言語の基本文法に不安があれば、この本でまず文法面の足固めをするといい。確かにこの本は良書でAmazonでもベストセラーだが、お金をかけずに学びたいのあれば、ネット上のJava解説サイトで勉強してもいいだろう!2、Python3におけるクラスとはクラスは設計図である。故にクラスを定義しただけでは、それをプログラムの部品として実際に利用することはできない。飛行機の設計図が空を飛ばないのと同じだ。設計図を元に「実際に使えるオブジェクト(=部品)」を生成する必要がある。設計図を元に作られたオブジェクトをインスタンスと呼ぶ。インスタンスは「具体化されたモノ」と理解するといい。ワープロソフトで作った文章を設計図(class)に例えると、プリントアウトされた文章がインスタンスだ。Python3における整数の「1」は「intクラス」のインスタンスであり、「実際に使えるオブジェクト」である。★全ての「オブジェクト」は、なんらかのclassから生み出された「インスタンス」である。[クラス名]:[内容]次の点に注意が必要。クラス名は大文字から始まりキャメルケースで記述する。【クラス名の良い例】AppleOrangeJuiceWindowsPc【クラス名の悪い例】appleorange_juicewindows-pcまた、クラス名の直後に(:)をつけるのを、うっかり忘れないよう留意すべし。[スポンサードリンク]4、最も原始的なクラスとインスタンス以下では、なんの内容も持たないクラスとしてTestを定義し、このTestクラスのインスタンス(=オブジェクト=部品)を生成する。実用性は皆無だがPythonにおけるクラスの文法の理解には役立つ。Test()インスタンスにはアトリビュートという機能がある。これはインスタンス内にデータを格納できる変数のようなものだ。ちなみにアトリビュートは「属性」を意味する。本当にインスタンスのアトリビュート(この場合は「val」)に100が代入されているか確かめてみる。本当にインスタンスのアトリビュート(この場合は「val」)に100が代入されているか確かめてみる。100アトリビュートは、クラスにはなんの影響も与えない。個別のインスタンスにのみ有効だ。以下のコードはエラーになる。100print(t2.val)「t1」、「t2」はそれぞれ、別個の、Testクラスのインスタンスだ。「t1」にはアトリビュート「val」に100を代入しているが、インスタンス「t2」は、何もデータを持っていない。故に、print()しようとするとエラーになる。1つのクラスからたくさんのインスタンスを作るならば、クラスを定義する段階で、アトリビュートも設計図に組み込んでおけばいい。全てのインスタンスに共通するアトリビュート(属性)をクラスで定義するには、メソッドを利用する。5、属性を持ったクラスを定義する例えば「商品(product)クラス」にアトリビュート(つまり”属性”を意味するインスタンス変数)として「価格(price)」と「在庫数(zaiko)」を持たせたい場合は次のように書く。アトリビュート(”属性”あるいは”インスタンス変数”)を設計段階で持つクラスを定義。商品(product)のインスタンスを2つ生成。アトリビュート(”属性”あるいは”インスタンス変数”)を設計段階で持つクラスを定義。商品(product)のインスタンスを2つ生成。9__init__(self)はアトリビュート(属性、インスタンス変数)を定義する際に用いる特殊メソッドだ。これは同時に初期化メソッドでもある。selfはインスタンスそのものを指し示す特別な引数だ。selfを使えばインスタンスそのものを操作できる。ちなみに、defと__init__()の間に「半角スペース」を入れるのを忘れないようにしよう。忘れてはいけない重要なポイントは、Pythonのクラスで引数をとるメソッドを定義する際は、必ず第1引数に「self」を指定するというルールだ。6、属性とメソッドを持ったクラスを定義する次のサンプルコードでは税込み価格を返すtax()メソッドを追加しています。商品(product)のインスタンスを2つ生成。商品(product)のインスタンスを2つ生成。zaiko)を渡さなければ、ERRORになってしまう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。