【Python】クラスってなんだろう?【プログラミング】

クラスってなんだろうというアイキャッチ画像

こんにちは!

pythonを勉強し始めると、クラスと言うものが出てきますよね。

この記事では、クラスとは何なのかを紐解いていきたいと思います。

クラスとは

クラスとは「変数」と「関数」をまとめた物のことです。

「設計図」「ひな形」などと呼ばれています。

RPGなどでキャラクターを生成する時をイメージすると分かりやすいと思います。

クラスとは設計図であること示す画像

上の画像のようにキャラクターを作成する際に、職種や性別などを決めることができると思います。

ここで説明する変数とは職種や性別、体力などの項目のことを指します。

上の画像のような、キャラクターの基本となるもの(設計図)をクラスと呼んでいます。

インスタンス

余談ではありますが、クラスを説明したついでにインスタンスについても説明しておきたいと思います。

クラスとインスタンスの関係について説明する画像

クラスでキャラクターの元となる設計図を作成すると、その作成されたものは実体化します。

この実体化したものをインスタンスと呼びます。

Pythonにおけるクラスの書き方

Pythonにおけるクラスの書き方は以下になります。

クラスの定義の仕方
class クラス名:
  def __init__(self):
    self.変数名 = 初期値

「class クラス名:」と入力することで、クラスを今から書きますよと宣言します。

そして改行してインデントし、def __init__(self)と記述することで、このクラスで作ったインスタンスを使うことを書いていきます。

クラスを定義する

せっかくなので、先ほどクラスの説明で使用した設計図を用いて、クラスを定義していきたいと思います。

クラスとは設計図であること示す画像

このキャラクターの変数は、「職種」「性別」「体力」「攻撃力」「魔法力」となっています。

これを上で説明したクラスの定義の仕方にならって記述したら場合、どうなるかを見ていきたいと思います。

クラスを定義する
class CharacterMake:
  def __init__(self,job,gender,life,power,magic):
    self.job = job
    self.gender = gender
    self.life = life
    self.power = power
    self.magic = magic 

職種をjob、性別をgender、体力をlife、攻撃力をpower、魔法力をmagicとします。

これで、上の画像のようなクラスを作成することができました。

属性と引数との関係を示した画像

ここでは詳しく説明しませんが上の画像のようにself.jobのような変数のことを、属性といいます。

クラスからキャラクターを生成する

クラスを作っても、どうなっているかわかりませんよね。

クラスを以下のように定義してみます。

クラスからキャラクターを生成する
class CharacterMake:
  def __init__(self,job,gender,life,power,magic):
    self.job = job
    self.gender = gender
    self.life = life
    self.power = power
    self.magic = magic 
    
     
character = CharacterMake("勇者","男性",75, 80,20)
print("職業:"+(character.job))
print("性別:"+(character.gender))
print("体力:"+str(character.life))
print("攻撃力:"+str(character.power))
print("魔法力:"+str(character.magic))

上記のコードを出力した結果は以下のようになります。

出力結果
職業:勇者
性別:男性
体力:75  
攻撃力:80  
魔法力:20  

各属性に引数が代入されたことがわかりますね。

イメージで言うと以下の画像のようになります。

あくまでイメージですが、クラスを用いて引数を入力することで、インスタンスを生成することができることがわかりますね。

おまけ:ランダムでキャラを生成してみる

先ほどはクラスに対して、引数を指定してキャラクターを生成しました。

実際にゲームだったらどうなるかを想定して、書いてみたいと思います。

キャラを生成

今回のプログラムでは、キャラの生成条件を以下の条件で作ってみます。

  1. 職種を「勇者」と「魔法使い」の2択
  2. 性別を「男性」と「女性」の2択
  3. 「体力」「攻撃力」「魔力」は1~100の数値でランダムに生成

以上、3つの条件でプログラムを作成した場合、以下のコードが書けると思います。

ランダムでキャラクターを生成
import random

class CharacterMake:
  def __init__(self,job,gender,life,power,magic):
    self.job = job
    self.gender = gender
    self.life = life
    self.power = power
    self.magic = magic 

character = CharacterMake(random.choice(["勇者","魔法使い"]),random.choice(["男性","女性"]),random.randint(1,100),random.randint(1,100),random.randint(1,100) )
print("職業:"+(character.job))
print("性別:"+(character.gender))
print("体力:"+str(character.life))
print("攻撃力:"+str(character.power))
print("魔法力:"+str(character.magic))
 

このように記述するれば、簡単ではありますがランダムにキャラクターが生成できます。

魔法力の高い勇者や、攻撃力の高い魔法使いなど、クスッと笑えるようなキャラクターが作れると思います。

もっと工夫していけば、体力などの能力値を職種ごとに範囲を選択することも可能でしょう。

キャラの性能を関数にまとめてみる

キャラクターを生成する時に、printを都度書いていると、コードが長くなってしまうようです。

そのため、クラスの中に関数を入れることでキャラを生成するコードを短くすることができます。

このクラスの中に入っている関数のことを、メゾットと呼びます。

関数をクラスの中に入れる

上のコードで、職業などを出力するコードをクラスの中に入れます。

クラスの中に入れるコードは以下になります。

ステータス
print("職業:"+(character.job))
print("性別:"+(character.gender))
print("体力:"+str(character.life))
print("攻撃力:"+str(character.power))
print("魔法力:"+str(character.magic))

確かにこのコードを都度書いていたら疲れるし、見づらくなってしまいますよね。

上のコードをstatusと言う関数にまとめて、コードの中に入れていきます。

ランダムでキャラクターを生成
class CharacterMake:
  def __init__(self,job,gender,life,power,magic):
    self.job = job
    self.gender = gender
    self.life = life
    self.power = power
    self.magic = magic 
  
  def status(self):
    print("職業:"+(self.job))
    print("性別:"+(self.gender))
    print("体力:"+str(self.life))
    print("物力:"+str(self.power))
    print("魔法力:"+str(self.magic))

これでstatusメゾットを作成することができました。

次に、このコードで正しくキャラクターを生成することができるかを確認していきたいと思います。

生成するキャラクターのステータスは以下を用意します。

生成するキャラクターのステータス
character1 = CharacterMake("勇者","男性",100,50,30)
character1.status()
print('-----------------------------')

character2 = CharacterMake("魔法使い","女性",100,40,80)
character2.status()
print('-----------------------------')

わかりやすいように、コードを簡単にしておきました。。

それでは、プログラムを実行してみたいと思います。

作成されたキャラクター
職業:勇者
性別:男性
体力:100
物力:50
魔法力:30
-----------------------------
職業:魔法使い
性別:女性
体力:100
物力:40
魔法力:80
-----------------------------

CharacterMakeのクラスに対して、引数を入れました。

その後、stausメソッドを呼び出すことで正しく引数を入っていることがわかりました。

まとめ

クラスとは設計図のようなものです。

この設計図を1度作成しておけば、後で使いたいと思った時に呼び出せばいいので非常に簡単です。

クラスと言う名前なので、私も混乱しました。

そのため「設計図」「ひな形」など、入れたら形を整えて出てくるものだとイメージしておけば良いかなと、私は思っています。

今回は簡単ではありましたがクラスについて説明しました。

この記事が少しでも皆さんの役にたったなら幸いです。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA