1
4

More than 3 years have passed since last update.

Paiza Python入門編8 : クラスを理解しよう

Last updated at Posted at 2020-11-03

PaizaでPython3が完全無料なのでまとめました。

Paiza Python3入門編

01:クラスを理解しよう

オブジェクトとは

簡単に言えば、変数と関数をセットしたもの

Playerオブジェクト

  • 変数
名前="paiza"
職業="魔法使い"
体力="120"
  • 関数
攻撃処理()
移動処理()

オブジェクトにまとめられている関数→メソッド

オブジェクトの使い方

  • クラスからオブジェクトを作って利用
  • クラス:オブジェクトの設計図
  • オブジェクト:クラスから生成する

Plyaerクラス

name
attack()

Plyaerクラスから、Plyaerオブジェクトを生成

name="paiza"
attack()

name="python"
attack()

name="dragon"
attack()

クラスから作成したオブジェクトのことをインスタンスという

オブジェクトのメリット

  • 変数とメソッドがセット

バグが出にくい

  • クラスとオブジェクトに分離

再利用しやすい
分類しやすい

多数のライブラリ/フレームワークがクラスをベースに作られている

02:クラスを作成しよう

lesson.py
#クラス名の先頭は大文字にする
#1.クラスでクラス名前Plyaerを指定
class Plyaer:
    #2.クラスが持つメソッド(関数を記述)
    def walk(self):
        print("勇者は荒野を歩いていた")

#3.クラス名を使ってオブジェクトを作る
#作ったオブジェクトは変数に代入しておこう
plyaer1=Plyaer()
#変数名.メソッド名で作成したオブジェクトを呼び出すこともできる
plyaer1.walk()

#変数にオブジェクトを代入することもできる

#クラス
class Player:

#プロパティやメソッド

    def walk(self):
        print("勇者は荒野を歩いていた")

    #メソッド増やした
    def attack(self, enemy):
        print("勇者は" + enemy + "を攻撃した")

#オブジェクト
player1=Player()
player1.walk()
player1.attack("スライム")

勇者は荒野を歩いていた
勇者はスライムを攻撃した

#オブジェクトとは、クラスのメソッドやプロパティをまとめたもの

演習

1.クラスからオブジェクトを作成しよう

lesson.py

class Greeting:
    def say_hello(self):
        print("hello paiza")

# この下に、必要なコードを追加してください
greeting=Greeting()
greeting.say_hello()

2.クラスにメソッドを定義しよう

class Plyaer:

lesson.py

class Greeting:
    # この下に、必要なコードを追加してください
    def say_hello(self):
        print("hello python")

paiza = Greeting()
paiza.say_hello()

3.間違い探し

:がなかった

lesson.py

class Greeting:
    def say_hello(self):
        print("hello paiza")

paiza = Greeting()
paiza.say_hello()

03:変数をクラスで管理しよう

class Plyaer:

lesson.py

class Player:
    #コンストラクタ
    #クラスからオブジェクトを作成する時に
    #最初に呼ばれるメソッド
    #Plyaerclassにjobという変数を追加する
    def __init__(self,job):
    #インスタンス変数と呼ぶ
        self.job=job

    def walk(self):
        print(self.job+"は荒野を歩いていた")

player1=Player("戦士")
player1.walk()


player2=Player("魔法使い")
player2.walk()

#player1オブジェクトは戦士という値を持ち続けている
player1.walk()
出力
戦士は荒野を歩いていた
魔法使いは荒野を歩いていた
戦士は荒野を歩いていた
#self.jobをインスタンス変数のこと

#オブジェクトが持つ変数のこと
#インスタンス変数はオブジェクトが存在する限り、
#値が保存される
        self.job=job

#selfとは
#インスタンス変数しようする際に必要な引数
#pythonではクラス内にあるメソッドの第一引数に
#メソッドの呼び出しに使ったオブジェクト自身が渡される
#selfは自分という意味の英語だが、
#メソッドの呼び出しに使ったオブジェクトのことを指している
#player1のworkメソッドを呼び出すとと、selfjobは
#player1のjob変数を呼び出す
#player2のworkメソッドをを呼び出すと
#player2のjob変数を呼び出している
 def __init__(self,job):

演習

1.クラスからオブジェクトを作成しよう

lesson.py
# クラスからオブジェクトを作成しよう

class Greeting:
    def __init__(self, name):
        self.name = name

    def say_hello(self):
        print("hello " + self.name)

# この下に、必要な処理を記述します

greeting=Greeting("paiza")
greeting.say_hello()

出力

hello paiza

2.クラスにインスタンス変数を追加しよう

lesson.py

class Greeting:
    def __init__(self,name):

        self.name=name


    def say_hello(self):
        print("hello " + self.name)

paiza = Greeting("paiza")
paiza.say_hello()


hello paiza

3.間違い探し
class Plyaer:

lesson.py

class Greeting:
    def __init__(self, name):
        self.name = name

    def say_hello(self):
        print("hello " + self.name)

paiza = Greeting("paiza")
paiza.say_hello()

04:RPGの敵クラスを作ろう

class Plyaer:

lesson.py

おさらい
def attack(enemy):
    print(enemy + "は勇者を攻撃した")

attack("スライム")


'''
Enemyclassを作る
class Enemy:
    def__init__(self,name)
    self.name=name
'''
#Enemyclassを作る
'''
class Enemy:
    def__init__(self,name)
    self.name=name
'''
class Enemy:
    def __init__(self,name):
        self.name = name

    def attack(self):
    #enemy→self.nane
        print(self.name + "は勇者を攻撃した")

#enemyクラスからをオブジェクト作る
slime=Enemy("スライム")
slime.attack()

出力
スライムは勇者を攻撃した

lesson.py

#Enemyclassを作る

class Enemy:
    def __init__(self,name):
        self.name = name

    def attack(self):
        print(self.name + "は勇者を攻撃した")

#複数の敵を作成するのに、リストにまとめる
enemies=[]
enemies.append(Enemy("スライム"))
enemies.append(Enemy("モンスター"))
enemies.append(Enemy("ドラゴン"))

#出力するためにfor文を使う
for enemy in enemies:
    enemy.attack()

出力
スライムは勇者を攻撃した
モンスターは勇者を攻撃した
ドラゴンは勇者を攻撃した

#英語のclassには分類という意味がある
#スライム、モンスター、ドラゴン、は同じEnemyクラスにいる敵だから共通のattackメソッドが使える

#英語インスタンスには実例という意味がある
#enemyクラスで敵という分類を定義してスライムやモンスターをオブジェクトとして作成している
#作成したリストをfor文でenemiesリストに代入している

演習

RPGの攻撃シーン

lesson.py

class Player:
    def __init__(self, name):
        self.name = name

    def attack(self, enemy):
        print(self.name + "は" + enemy + "を攻撃した")

team = []
team.append(Player("勇者"))
team.append(Player("戦士"))
team.append(Player("魔法使い"))

for player in team:
     player.attack("スライム")

05:引数と戻り値のあるメソッドを作ろう

lesson.py
class Item:
    def __init__(self,price,quantity):
        self.price=price
        self.quantity=quantity

    def total(self):
        return self.price * self.quantity
apple=Item(120,15)
print("合計金額は" + str(apple.total()) + "円です")
#total=apple.total(),str(total)
#としてもOK→totalメソッドの戻り値をprintで出力している
apple=Item(120,15)
print("合計金額は" + str(total) + "円です")
orange=Item(85,32)
print("合計金額は"+str(orange.total())+"円です")
出力
合計金額は1800円です
合計金額は1800円です
合計金額は2720円です
lesson.py
税込金額にするには
class Item:
    tax=1.08
#消費税を作りたい classs変数を使う、
#インスタンス変数と違いそのクラスから作成した
#オブジェクト全てで利用できる変数のこと

    def __init__(self,price,quantity):
        self.price=price
        self.quantity=quantity

    def total(self):
        #小数点以下を切り捨てるためのint
        #消費税を計算するための`Item.tax
        return int(self.price * self.quantity*Item.tax)
apple=Item(120,15)
total=apple.total()
print("合計金額は" + str(total) + "円です")
orange=Item(85,32)
print("合計金額は"+str(orange.total())+"円です")

合計金額は1944円です
合計金額は2937円です

演習

1.学生メソッドを呼び出す

lesson.py

 class Gakusei:
    def __init__(self, kokugo, sansu):
        self.kokugo = kokugo
        self.sansu  = sansu
    def sum(self):
        return str(self.kokugo + self.sansu)
# この下に、必要な処理を記述します
yamada = Gakusei(70, 43)
print("合計は" +str(yamada.sum()) +"点です")

2.学生メソッドを作る

lesson.py
class Gakusei:
    def __init__(self, kokugo, sansu):
        self.kokugo = kokugo
        self.sansu  = sansu
    # この下に、合計得点を戻り値として返すsumメソッドを記述する
    def sum(self):
        return str(self.kokugo + self.sansu)
yamada = Gakusei(70, 43)
print("合計は" + str(yamada.sum()) + "点です")

06:文字列とリストのメソッド

1.文字列に対してメソッドを実行する

lesson.py
text= "pYthon"
print(text)
#頭文字を大文字に
print(text.capitalize())
#全て大文字に
print(text.upper())
players="勇者,戦士,魔法使い,忍者"
#文字列をリストにする
#splitメソッドは、引数で指定した文字で
#文字列を分割してリストを返すメソッド
list=players.split(",")
print(list)
#リストで利用できるメソッド
#引数で指定した要素をリストから削除できる
list.remove("忍者")
print(list)
list.append("霧島")
print(list)
pYthon
Python
PYTHON
['勇者', '戦士', '魔法使い', '忍者']
['勇者', '戦士', '魔法使い']
['勇者', '戦士', '魔法使い', '霧島']

演習

lesson.py
入力
testcase
msg = input()
# この下に、msgが全て小文字かどうかを表示する処理を記述する
print(msg.islower())
出力
True

2.リストに対してメソッドを実行する

lesson.py
team = ["勇者", "戦士", "魔法使い", "忍者"]
# この下に、インデックス3に「盗賊」を追加して、リストを表示する処理を記述する
team.insert(3, "盗賊")
print(team)

07:アクセス制限を理解しよう

lesson.py
class Player:
    def __init__(self, job, weapon):
        self.job = job
        self.weapon = weapon
    def walk(self):
        print(self.job + "は荒野を歩いていた")

    #メソッド名の前にアンダーバーをつける
    #__attack
    def __attack(self, enemy):
        print(self.weapon + "で" + enemy + "を攻撃")
    #__attack
        self.__attack("スライム")
player1 = Player("戦士", "剣")
player1.walk()
#__attack  クラスの外でしているこの処理はできない
#player1.__attack("スライム")
__.weapon
print(player1.weapon)
#変数名の前にアンダーバー(__)を2つを追加すると
#クラスの中でしか呼び出せない変数になる
#これをプライベート変数、プライベートプロパティという
lesson.py
class Player:
    def __init__(self, job, weapon):
        self.job = job
        #__weapon
        self.__weapon = weapon
    def walk(self):
        print(self.job + "は荒野を歩いていた")

    def __attack(self, enemy):
        #__weapon
        print(self.__weapon + "で" + enemy + "を攻撃")
        self.__attack("スライム")
player1 = Player("戦士", "剣")
player1.walk()
#__weapon
print(player1.__weapon)
#変数名の前にアンダーバー(__)を2つを追加すると
#クラスの中でしか呼び出せない変数になる
#これをプライベート変数、プライベートプロパティという

演習

「文字列に対してメソッドを実行する」

lesson.py
class Greeting:
    def __init__(self, name):
        self.__name = name
    def say_hello(self):
    #ここにアンダーバー2つを追加する
        print("hello " + self.__name)
paiza = Greeting("paiza")
paiza.say_hello()
1
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4