VBA別館・Python別館
Python 自作関数 クラス - Tak
2018/12/14 (Fri) 20:48:57
これからのPythonを考えると、独自のオブジェクトを使うときはクラスを定義する必要があります。
難しいことは考えずに、簡単な自作関数(クラスと言います)を作ります。
クラスは親クラスを造れば、子クラスは親の性質を引き継ぐことが出来ますので、後々子クラスを作るのが簡単になるようです。
では早速作ってみましょう。
① カスタマー訪問計画
上司のとの打ち合わせを繰り返します。
---------------------------
class Tutor:
def __init__(self, max):
self.max = max
self.count = 0
def teach(self):
if self.count < self.max:
print('今日でしょ!')
print()
else:
print('よーし続きは明日だ')
self.count += 1
#=====================================
# プログラムの起点
#=====================================
if __name__ == '__main__':
tu = Tutor(4)
for i in range(5):
print('このカスタマーにはいつ行くのですか?')
tu.teach()
---------------------------
これでrunすると
このカスタマーにはいつ行くのですか?
今日でしょ!
このカスタマーにはいつ行くのですか?
今日でしょ!
このカスタマーにはいつ行くのですか?
今日でしょ!
このカスタマーにはいつ行くのですか?
今日でしょ!
このカスタマーにはいつ行くのですか?
よーし続きは明日だ
>>>
と表示されます。
Re: Python 自作関数 クラス - Tak
2018/12/15 (Sat) 10:17:46
② 前回の説明
少し戻ってクラスって何なのだ!という所から始めたいと思います。
いままで何気なく使っていた、表示関数print()、乱数発生関数random()、整数int()などなどすべてクラスなのです。
頻繁に使われる関数は、自分用に作っておけばこれからはそれを多少変更して(これが継承というやつです)、子クラスを造れば使い回しが出来るというわけです。
卑近な例でいうと、例えば class Behicleという親クラスを作り、Behicleに共通のスペック(エンジン、車輪、ブレーキ、ハンドル)だけを決めて置きあとは子クラスのcar,bike・・・・と幾らでも作っていけます。
一回しか使わない関数の場合はクラスを作る必要はなく、単に関数を作ってしまえば事足ります。
今回はクラス作成の練習ですので、前回のcodeにどんな意味があるのか書いてみます。
---------------------------
・Tutorと言うのが親クラスで、selfは子クラス(すなわち継承するクラス)です。
・def __init__(self,パラメーター,,,,)部分でオブジェクトの初期化をします。
・self.maxやself.countはインスタンスと呼ばれ、ここで値が代入されます(初期化)。
・selfは一般に使われますが、myとかmeでもなんでもOKです。
・teach(self)が子クラスの名前です。
・子クラスのcountがmaxより小さいうちは、teachはprint('今日でしょ!')と言います。
・子クラスのcountがmaxより同じか大きくなった時には、print('よーし続きは明日だ')とprintします。
・print()は見やすくするために、一段開けてます。
・self.countは、カウンターcountを1ずつ増やします。
ここまでがクラスの宣言です。
次に「プログラムの起点」が、処理作業の部分です。ここが一番分かり難い。
・tuはTotorの参照情報で、この数字が元のクラスに戻されてself.maxが4に初期化されます。
・if __name__ == '__main__':と書いたことで、tutorモジュールを別のモジュールでインポートして使えるようになります。
--->ますます分かんなくなりそう!
・def teach(self):は処理回数に応じて異なるメッデージを表示するメソッドです。
・for i in range(5):は5回目で、メッセージが変わり、プログラムは終了します。
何遍読んでも覚えられません。 必要なときコピペしましょう(ネットにも沢山出ているし)。
Re: Python 自作関数 クラス - Tak
2018/12/15 (Sat) 14:51:08
③ すこし簡素化
クラス変数にして簡素化する
------------------------
class Tutor:
count = 0
max = 4
def teach(self):
if self.__class__.count < self.__class__.max:
print('今日行きましょう!')
print()
else:
print('よーしもう一回明日トライだ')
self.__class__.count += 1
#==================================
# プログラムの起点
#===================================
if __name__ == '__main__':
tu1 = Tutor()
for i in range(3):
print('このカスタマーにはいつ行くのですか?')
tu1.teach()
tu2 = Tutor()
for i in range(2):
print('この客は買ってくれませ~ん')
tu2.teach()
---------------------------
これをrunすると、
このカスタマーにはいつ行くのですか?
今日行きましょう!
このカスタマーにはいつ行くのですか?
今日行きましょう!
このカスタマーにはいつ行くのですか?
今日行きましょう!
この客は買ってくれませ~ん
今日行きましょう!
この客は買ってくれませ~ん
よーしもう一回明日トライだ
>>>
となります。 いろいろ納得できるまで変数を変えてみましょう。