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()