ARMtech

Python入門:クラス

クラス

クラスを使うと、プログラムの処理を一つにまとめることができます。

クラスの定義
class クラス名 :
        クラスの処理

クラスは関数と同じで、定義するだけではプログラムで処理されることはありません。ただ、クラスを利用するときは、関数のように呼び出すのではなく、変数に収めます。

クラス名は大文字から始めることが慣例です。

class Example :

#passはクラスの中身を書かないことを示している※passはif文、while文、関数などでも使うことができます。

pass

#変数instanceの中には、Example型のデータ(インスタンス)が収められます。

instance1 = Example()

#Exampleのインスタンスは複製可能

instance2 = Example()

上のコードでは、定義されたクラスをもとに新しいデータが生成されて変数に収められます。ここで、新しいデータのことをインスタンスといい、この操作をインスタンス化といいます。

フィールド

クラスの中には、変数をいれることができます。そして、クラスの中の変数のことをフィールドといいます。

フィールドは、クラス変数インスタンス変数の2つに分けることができます。

#クラス変数の使用例

class Example :

field = 0

#クラス変数は、インスタンス化されてなくてもクラスさえ定義されていれば、利用することができます。

print(Example.field)

Example.field = 1

print(Example.field)

実行結果

0
1

クラス変数は、【クラス名.フィールド名】で利用できます。

#インスタンス変数の使用例

class Example :

field = 0

#インスタンス変数は、自身のインスタンスから利用することができます。

instance1 = Example()

instance2 = Example()

print(f"{instance1.field} {instance2.field} {Example.field}")

instance1.field = 1

instance2.field = 2

Example.field = 3

print(f"{instance1.field} {instance2.field} {Example.field}")

実行結果

0 0 0
1 2 3

インスタンス変数は、【インスタンス名.フィールド名】で利用できます。また、インスタンス変数は、各インスタンスごとに異なる値を代入することができます。

メソッド

クラスの中には、関数をいれることができます。そして、クラスの中の関数のことをメソッドといいます。

メソッドは、クラスメソッドインスタンスメソッドの2つに分けることができます。

#クラスメソッドの使用例

class Example :

field = 0

#クラスメソッドは引数がない

def cl_method() :

field = 1

print(field)

#クラスメソッドは、インスタンス化されてなくてもクラスさえ定義されていれば、利用することができます。

Example.cl_method()

実行結果

1

クラスメソッドは、【クラス名.メソッド名(引数)】で利用できます。また、クラスメソッドの中では、クラス変数や他のクラスメソッドを利用することができます。

#インスタンスメソッドの使用例

class Example :

field = 0

#インスタンスメソッドは、引数にselfを入れる。

def ins_method(self,num) :

#インスタンスメソッドからインスタンス変数や他のインスタンスメソッドを利用するときは、【self.】を前に置く

self.field = num

print(self.field)

instance1 = Example()

instance2 = Example()

#インスタンスメソッドは、自身のインスタンスから利用することができます。

instance1.ins_method(1)

instance2.ins_method(2)

実行結果

1
2

インスタンスメソッドは、【インスタンスを収めた変数名.メソッド名(引数)】で利用できます。また、インスタンスメソッド中では、インスタンス変数や他のインスタンスメソッドを利用することができます。

オブジェクト指向

これまでクラスの書き方を説明しましたが、この説明だけでクラスを使いこなすのは難しいです。クラスを使えば、ゲームのキャラクターやモブを再現することができます。そのために大切な考えかたがオブジェクト指向です。

オブジェクト指向は、キャラクターやモブなどの機能をクラスにまとめてシステムを構成する考え方です。
文字の説明だけではしっくりこないと思うので、使用例を挙げてみます。

#愛犬のクラス

class Dog :

name=""

age=0

def play(self) :

print(f"愛犬{self.name}と遊んだ")

self.old()

def feed(self) :

print(f"愛犬{self.name}に餌を与えた")

self.old()

def old(self) :

age += 1

if self.age < 10 :

print(f"愛犬{self.name}は年を取った\n{self.age}歳")

else :

print(f"愛犬{self.name}は老衰死した")

上のコードのでは、Dogクラスを定義しています。Dogクラスには名前と年齢のフィールドと遊ぶメソッド、餌を与えるメソッド、老いさせるメソッドがありどのメソッドを呼んでも必ず老いさせるメソッドは発動し、愛犬は、10歳を超えると死んでしまいます。

それでは、このクラスを使って愛犬と戯れるゲームを作ってみます。

#愛犬のクラス

class Dog :

name=""

age=0

def play(self) :

print(f"愛犬{self.name}と遊んだ")

self.old()

def feed(self) :

print(f"愛犬{self.name}に餌を与えた")

self.old()

def old(self) :

age += 1

if self.age < 10 :

print(f"愛犬{self.name}は年を取った\n{self.age}歳")

else :

print(f"愛犬{self.name}は老衰死した")

print("愛犬と戯れるゲーム")

ins_dog = None

while True :

if ins_dog == None:

action = input("アクションを選んでください\n1:新しい愛犬を買う\n2:ゲームを終わる\n>>")

if action == "1":

ins_dog = Dog()

name = input("名前を入力してください\n>>")

ins_dog.name = name

elif action == "2":

break

else :

print("1か2で入力してください")

continue

else :

action = input("..name}に餌をやる\n3:放置\n4:ゲームを終わる\n>>")

if action == "1":

ins_dog.play()

elif action == "2":

ins_dog.feed()

elif action == "3":

ins_dog.old()

elif action == "4":

break

else :

print("1から4の数字で入力してください")

continue

if ins_dog.age >= 10:

ins_dog = None

実行結果

愛犬と戯れるゲーム
アクションを選んでください
1:新しい愛犬を買う
2:ゲームを終わる
>>1
名前を入力してください
>>チャーリー
アクションを選んでください
1:愛犬チャーリーと遊ぶ
2:愛犬チャーリーに餌をやる
3:放置
4:ゲームを終わる
>>1
愛犬チャーリーと遊んだ
1歳
アクションを選んでください
1:愛犬チャーリーと遊ぶ
2:愛犬チャーリーに餌をやる
3:放置
4:ゲームを終わる
>>2
~~~~省略(10回アクションすると老衰死する)~~~~
アクションを選んでください
1:愛犬チャーリーと遊ぶ
2:愛犬チャーリーに餌をやる
3:放置
4:ゲームを終わる
>>3
愛犬チャーリーは老衰死した
アクションを選んでください
1:新しい愛犬を買う
2:ゲームを終わる
>>2

Dogクラスを利用して、愛犬と戯れるゲームを作りました。愛犬を買い、名前を決めたら、呼び出すメソッドを選択するのを10解繰り返します。そして、10回繰り返したあとは老衰死します。

もっと本格的になると、複数のクラスを作り、インスタンスも複製して、数々のモブやキャラクターを登場させることもできます。

最後に

この記事では、クラスの書き方とオブジェクト指向について解説しました。
もっとPythonを学びたい!という方はこちらの記事でPythonの基本的な構文を学習することが出来ますのでぜひ立ち寄ってみてください!

<   >
© 2024 ARMtech