[Python]クラスから生成したメソッドでユーザーインスタンス変数の値を変えてみる【アプリ作成】
■Pythonで、クラスから生成したインスタンス変数を設定したオブジェクトに、値を変えるメソッドを作り、実際に中身を確認します。
■複数のユーザーを作成したときの処理を解説します。
■インスタンス化したメソッドを共通で使う意味を解説します。
インスタンスメソッド
インスタンス・・クラスから実体を生成し、そこに変数を入れて形にしたものとなります。
インスタンスメソッド・・メソッドで、クラスをインスタンス化したあと、instance.method()の形で実行することができます。
今回は「ランニングマン」というコンソールアプリを作り、pirntで表示してみたいと思います。
アプリ概要
・名前を登録
(初期設定値が登録される)
・走る動作でパラメータが変化
・寝る動作 〃
始めに全コードを載せます。
class RunningMan:
def __init__(self):
self.name = "サンプルさん"
self.power = 10
self.level = 1
def runmethod(self):
#セルフでインスタンス自身を取得、変数の値を代入したものを取り出す
self.power -=1
self.level +=1
return self.power,self.level
def sleepmethod(self):
self.power +=1
return self.power
runner1 = RunningMan()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
runner1.runmethod()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
runner1.sleepmethod()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
アプリの中身
ランニングマンは「名前」はサンプルさんとし、power = 10の体力とlevel =1のレベルを保持しています。
イニシャライズで初期化
class RunningMan:
def __init__(self):
self.name = "サンプルさん"
self.power = 10
self.level = 1
イニシャライズ・・初期化して始めの設定を読み込ませる。
ランメソッドを作る
class Runningmanの中にメソッド= runmethodを作り、「走る」動作で、体力を1減らし、レベルを1あげます。
def runmethod(self):
#セルフでインスタンス自身を取得、変数の値を代入したものを取り出す
self.power -=1
self.level +=1
return self.power
「self」(セルフ)はインスタンスを作り上げた自分自身を指します。
スリープメソッドを作る
class Runningmanの中にメソッド= sleepmethodを作り、「眠る」動作で、体力を1増やします。
def sleepmethod(self):
self.power +=1
return self.power
インスタンス化して実行してみる
runner1 = RunningMan()
runner1.runmethod()
ランナー1という変数にRunningManクラスをインスタンス化したものを入れ、メソッドを取り出すと、
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
runner1.runmethod()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
runner1.sleepmethod()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
ランナー1からメソッドが実行されランナー1の値の中身はメソッドの通りに変化しています。
私の名前はサンプルさん。
体力が10ポイントあり
今のレベルは 1!
-------------------
私の名前はサンプルさん。
体力が9ポイントあり
今のレベルは 2!
-------------------
私の名前はサンプルさん。
体力が9ポイントあり
今のレベルは 3!
メソッドの中で、selfで自分自身を呼び出し、変数の値を取り出しています。一度インスタンス化したランナー1はメソッドを実行させるたびに値が変化していくので、共通化したインスタンスを作るのに適したテンプレート作成になるかと思います。
複数のランナーユーザーを想定してみる
複数のユーザーを想定した場合のアプリの制作をしてみます。
下記に全コードを載せます。
ランナー登録が2人になった場合
class RunningMan:
def __init__(self):
self.name = ""
self.power = 0
self.level = 0
def runmethod(self):
#セルフでインスタンス自身を取得 、変数の値を代入したものを取り出す
self.power -=1
self.level +=1
return self.power,self.level
def sleepmethod(self):
self.power +=1
return self.power
runner1 = RunningMan()
runner1.name = "サンプルさん"
runner1.power = 15
runner1.level = 0
runner2 = RunningMan()
runner2.name = "サンプル子ちゃん"
runner2.power = 8
runner1.level = 0
print("--------サンプルさん-----------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
runner1.runmethod()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
runner1.sleepmethod()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
print("--------サンプル子ちゃん-----------")
print(f'私の名前は{runner2.name}。\n体力が{runner2.power}ポイントあり\n今のレベルは {runner2.level}!')
runner2.runmethod()
print("-------------------")
print(f'私の名前は{runner2.name}。\n体力が{runner2.power}ポイントあり\n今のレベルは {runner2.level}!')
runner2.sleepmethod()
print("-------------------")
print(f'私の名前は{runner2.name}。\n体力が{runner2.power}ポイントあり\n今のレベルは {runner2.level}!')
変化した部分は初期値に
名前は””(なし)、パワー、レベルを0にし、設定できるようにします。
class RunningMan:
def __init__(self):
self.name = ""
self.power = 0
self.level = 0
初期値をインスタンス変数1、2に代入していきます。
runner1 = RunningMan()
runner1.name = "サンプルさん"
runner1.power = 15
runner1.level = 0
runner2 = RunningMan()
runner2.name = "サンプル子ちゃん"
runner2.power = 8
runner1.level = 0
結果をprintで表示していきます。
print("--------サンプルさん-----------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
runner1.runmethod()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
runner1.sleepmethod()
print("-------------------")
print(f'私の名前は{runner1.name}。\n体力が{runner1.power}ポイントあり\n今のレベルは {runner1.level}!')
print("--------サンプル子ちゃん-----------")
print(f'私の名前は{runner2.name}。\n体力が{runner2.power}ポイントあり\n今のレベルは {runner2.level}!')
runner2.runmethod()
print("-------------------")
print(f'私の名前は{runner2.name}。\n体力が{runner2.power}ポイントあり\n今のレベルは {runner2.level}!')
runner2.sleepmethod()
print("-------------------")
print(f'私の名前は{runner2.name}。\n体力が{runner2.power}ポイントあり\n今のレベルは {runner2.level}!')
--------サンプルさん-----------
私の名前はサンプルさん。
体力が15ポイントあり
今のレベルは 0!
私の名前はサンプルさん。
体力が14ポイントあり
今のレベルは 1!
私の名前はサンプルさん。
体力が15ポイントあり
今のレベルは 1!
--------サンプル子ちゃん-----------
私の名前はサンプル子ちゃん。
体力が8ポイントあり
今のレベルは 0!
私の名前はサンプル子ちゃん。
体力が7ポイントあり
今のレベルは 1!
私の名前はサンプル子ちゃん。
体力が8ポイントあり
今のレベルは 1!
とユーザーが増えても、異なる初期値から共通したメソッドを通して値を変化させることができました。
ご覧いただきありがとうございました。 サポートしていただいたお金は開発費にかけさせていただきます。