こんにちは、なりなりです(^ ^)
僕が初めてオブジェクト指向のプログラミング言語に触れたのはC++でしたが、オブジェクトの説明を見ると、「世の中の物は全てオブジェクトであり...」など、何か話が難しそうだし、出てくる言葉に馴染みが無いために逃亡したくなりがちです。
でも、そうすると後々困るし、いうほど難しくないし、クラスは作らないにしても使わないことはあり得ないので、Pythonのオブジェクト(Object)について、簡単にまとめておきます。
5分で絶対に分かるオブジェクト指向:5分で絶対に分かる(1/6 ページ) - ITmedia エンタープライズ
オブジェクトについて、この説明は分かりやすいかも。
Pythonのオブジェクトの作りは下記の様になっており、C++と大差ありません(スマホの場合、横表示にすると見やすい)。
オブジェクト(Object) |ークラス(Class) : オブジェクトの宣言 | |ープロパティ(Property) クラスのメンバー変数 | | |ークラス変数 クラス共通で存在 | | |ーインスタンス変数 インスタンスごとに存在 | |ーコンストラクタ(Constructor) メンバー変数の初期化 | |ーメソッド(Method) クラスのメンバー関数 | |ーインスタンス(Instance) : オブジェクトの例(実体)
クラスはオブジェクトの定義であり、その実体をインスタンスと呼びます。
クラスについては、クラスと聞いて誰もが思い浮かぶ、学校のクラスをイメージすればいいです。
クラスのメンバーには名前、性別、年齢などの特性(Property)と変数が有り、プロパティにはクラスの人数といったクラス全体で共通のクラス変数と個々のメンバーの変数であるインスタンス変数が有ります。
インスタンス変数が不定とならないようにコンストラクタで初期化するのが通例であり、特性を知る手段(Method)が有ります(名簿を見るとか)。
簡単なクラスの宣言例が下記です。
class MyClass: #クラス名の先頭は大文字が慣習 """クラスの説明""" number = 40 #クラス変数の初期化 def __init__(self): #コンストラクタ関数名は決められている self.name = "" #インスタンス変数の初期化 #self.gender = "" #追加予定のインスタンス変数 #self.age = "" #追加予定のインスタンス変数 def getName(self): #インスタンス変数を表示するメソッド return self.name def setName(self, name): #インスタンス変数を変更するメソッド self.name = name
モジュールの冒頭、クラスの冒頭、関数の先頭に三重クォート """...""" で記述したコメントは、ドキュメントストリング と呼ばれ、モジュールオブジェクト、クラスオブジェクト、関数オブジェクトの__doc__アトリビュートで参照できて、例えば
>>> print(MyClass.__doc__) 'クラスの説明'
といった具合。
定義したクラスの使い方としては、
taro = MyClass() #taroをインスタンスとして生成 taro.setName("Yamada Taro") #taroの名前を"Yamada Taro"に設定 print(taro.getName()) #taroの名前を出力
といった具合。
こうして整理してみると、それ程難しくありませんよね。
今回で、Pythonの文法的なお勉強はお仕舞いにして、プログラミングの過程で知らないことが出てきたら、都度勉強します。
プログラミングは、あまり根を詰めて文法の勉強すると途中で嫌になりますから(英語の勉強に似てる)、ざっくり理解したら、興味の有るプログラムを実際に組んでみるのが一番です。
逆に、仕事上でも、プライベートでも構いませんが、作ってみたいプログラムが思い浮かばない人は、プログラミングを習得するのは難しいです。
僕の場合は、取り敢えず
- とっかかりとして、iPhoneの標準タイマーに無い、秒数の指定出来るタイマー
- iPhone同士のBluetoothトランシーバ(奥さんとのサイクリングで使いたい)
- 川崎市のテニスコートの空きを調べるプログラム(ホームページがアホで使いにくいから。Java Scriptでもやってみる)
- 仕事で使うプログラムのとっかかりとして、FIRフィルタ係数計算プログラム
- FIRフィルタ係数プログラムで使いたい固定小数点クラス
- 仕事で使い出したマイコン(PSoC)と通信するプログラム(合わせてPSoCの勉強も)
- PSoC 4Lの評価ボードとiPhoneでBLE通信するPythonistaプログラム
などを作る予定です。
久しぶりにプログラムに触れて、ちょっと楽しくなってます。ソフトはハードより敷居が低いのが良いです(^-^)