Python3メモ⑫(クラス)

クラスとは、簡単に言いますと、変数と関数(クラス内の関数はメソッドと言います)の集まりです(丁寧に言いますと「オブジェクト指向とは?」という概念の説明になり、その説明で複雑になり、初心者にはわかりにくくなりますので、最初は「クラスとは変数とメソッドの集まり」と覚えておけばいいと思います)。

クラスを使う時は、基本的にインスタンス化して使います。
インスタンス化したものを「インスタンス」または「オブジェクト」と言います。
そのオブジェクトに対して何らかの操作をして使います。

簡単なクラスの例

結果
コンストラクタ
ライブインホープ

クラスの例2

C++によるプログラミング入門7のクラスを参考にさせていただきました。

結果
ロケット1号:現在の燃料は3です。
ロケット1号:現在の速度は2です。
——–
ロケット2号:現在の燃料は8です。
ロケット2号:現在の速度は2です。
——–
ロケット1号:現在の燃料は1です。
ロケット1号:現在の速度は4です。
——–
ロケット2号:現在の燃料は6です。
ロケット2号:現在の速度は4です。
——–
ロケット1号:燃料切れです。加速できません。
——–
ロケット2号:現在の燃料は4です。
ロケット2号:現在の速度は6です。
——–
Rocketクラスから2つのインスタンスを生成して、それぞれのオブジェクトがkasokuメソッドを繰り返しているだけです。

クラスの例3

リストに4つのクラスのインスタンスを入れて、ループして、calc関数にオブジェクトなどを渡しています。4つのクラスはcalcという同じメソッド名を持っていますが、その中身は違うので、ポリモーフィズム(後述)感が出ます。
※Pythonは関数を引数にできますので、これは関数だけでもできますが、クラスの説明ということなのでご了承下さい。

結果
12
6
27
3.0

クラスの例4

バトルゲームのような感じです。randomを使うとゲームっぽくなります。
Playerクラスで2つのインスタンスを作成し、Battleクラスのインスタンスの中で使用しています。

結果はランダムになります
ライブの攻撃:10のダメージを与えた!
ホープの体力は40になった!
ホープの攻撃:16のダメージを与えた!
ライブの体力は14になった!
ライブの攻撃:1のダメージを与えた!
ホープの体力は39になった!
ホープの攻撃:27のダメージを与えた!
ライブの体力は-13になった!
ライブは死んだ!
Game Over

クラス変数、インスタンス変数、ローカル変数

クラス変数はクラス共通で使用できる変数です。
インスタンス変数は特定のインスタンスのみで使える変数です。第一引数にselfのついたメソッド内で定義します。
メソッド内だけで使えるローカル変数は関数の時と同じ使い方です。
Javaとは違いprivateやprotectedがないです。アンダースコア(_)で始まる変数や関数は外から参照しないという慣習があり、アンダースコア2個(__)で始まる変数や関数は参照制限されます。

結果
0
クラス変数:1/インスタンス変数:変数1/ローカル変数:l_var3
クラス変数:2/インスタンス変数:変数2/ローカル変数:l_var3
クラス変数:3/インスタンス変数:変数3/ローカル変数:l_var3
3

インスタンスメソッド、クラスメソッド、スタティックメソッド

インスタンスメソッドは第一引数にselfがあり、インスタンスから呼び出せるメソッド。
クラスメソッドは@classmethodという記述で、第一引数にclsがあるメソッド。
スタティックメソッドは@staticmethodという記述のあるメソッド。

結果
インスタンス変数
クラス変数
クラス変数
クラス変数
クラス変数

クラスメソッドとスタティックメソッドの使い分けは、スタティックメソッドはclsの引数がいらないので、クラスに依存しない処理の場合に使えばいいそうです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする