概要
Pythonのクラスについて学習したので、使用例をまとめます。
クラスとメソッドとオブジェクトの作成
# coding: utf-8
#クラスとメソッドを作成
class Player:
def walk(self):
print("ヒトカゲは荒野を歩いていた")
def attack(self, enemy):
print("ヒトカゲは" + enemy + "を攻撃した")
#Playerクラスから作ったオブジェクトを変数に代入
player1 = Player()
#変数でメソッドを実行
player1.walk()
player1.attack("ゼニガメ")
クラスと初期化を行うコンストラクタ
# coding: utf-8
class Player:
#オブジェクトの初期化を行うコンストラクタ
#オブジェクトを作るとき最初に呼ばれる
#selfはインスタンス変数を使うときに必要となる。
#メソッドの呼び出しに使ったオブジェクト自身を示す。
def __init__(self, job):
#インスタンス変数にjobの値を入れる
self.job = job
def walk(self):
print(self.job + "は歩いていた")
player1 = Player("ヒトカゲ")
player1.walk()
引数と戻り値のあるメソッドを使う
# coding: utf-8
class Item:
#クラス変数
tax = 1.08
def __init__(self, price, quantity):
#インスタンス変数に引数を代入
self.price = price
self.quantity = quantity
def total(self):
#インスタンスから合計を算出。小数点以下を切り捨てる為int関数を使う
return int(self.price * self.quantity * Item.tax)
#オブジェクトを作成
orange = Item(85, 32)
print("合計金額は" + str(orange.total()) + "円です")
テキストデータを操作するメソッドを使う
# coding: utf-8
text = "pYthon"
#通常表示
print(text)
#先頭の文字だけを大文字に変換
print(text.capitalize())
#全ての文字を大文字に変換
print(text.upper())
#文字列が小文字ならTrue。そうでなければFalse。
print(text.islower())
クラスの中でしか使えないプライベート関数、プライベート変数
# coding: utf-8
class Player:
def __init__(self, job, weapon):
self.job = job
#プライベート変数
self.__weapon = weapon
def walk(self):
print(self.job + "は草むらを歩いていた")
self.__attack("ピカチュウ")
#プライベート関数
def __attack(self, enemy):
print(self.__weapon + "で" + enemy + "を攻撃")
player1 = Player("サトシ", "棒")
player1.walk()
継承を使ってスーパークラスとサブクラスを定義する
# coding: utf-8
#スーパークラスを定義
class Box:
def __init__(self, item):
self.item = item
def open(self):
print("宝箱を開いた。" + self.item + "を手に入れた。")
#サブクラスを定義
class JewelryBox(Box):
def look(self):
print("宝箱はキラキラと輝いている。")
#スーパークラスのメソッドが使える
box = Box("鋼鉄の剣")
box.open()
#スーパークラスとサブクラスのメソッドが使える
jewelrybox = JewelryBox("魔法の指輪")
jewelrybox.look()
jewelrybox.open()
スーパークラスで定義されたメソッドを書き換える
# coding: utf-8
class Box:
def __init__(self, item):
self.item = item
def open(self):
print("宝箱を開いた。" + self.item + "を手に入れた。")
class MagicBox(Box):
def look(self):
print("宝箱は、妖しく輝いている。")
#openメソッドで行われる処理を書き換える(オーバーライド)
def open(self):
print("宝箱を開いた。" + self.item + "が襲ってきた!")
box = Box("やくそう")
box.open()
magicbox = MagicBox("ミミック")
magicbox.look()
magicbox.open()
サブクラスからスーパークラスで定義されたメソッドを呼び出す
# coding: utf-8
class Player:
def __init__(self, name):
self.name = name
def attack(self, enemy):
print(self.name + "は、" + enemy + "を攻撃した!")
class Wizard(Player):
def __init__(self):
#スーパークラスのメソッドに引数を与えて呼び出す
super().__init__("魔法使い")
def attack(self, enemy):
self.__spell()
print(self.name + "は、" + enemy + "に炎を放った!")
print("=== パーティーでスライムと戦う ===")
hero = Player("勇者")
warrior = Player("戦士")
wizard = Wizard()
party = [hero, warrior, wizard]
for member in party:
member.attack("スライム")
クラスメソッドをデコレータで定義する
class Player:
__charactor_count = 0
#クラス変数を扱うクラスメソッドをデコレータで定義
#引数をclsにしてクラス自身を取り込み
@classmethod
def summary(cls):
print(str(Player.__charactor_count) + "人で、スライムを攻撃した。")
def __init__(self, name):
self.name = name
Player.__charactor_count += 1
print(str(Player.__charactor_count) + "番目のプレイヤー、" + self.name + "が登場した。")
def attack(self, enemy):
print(self.name + "は、" + enemy + "を攻撃した!")
class Wizard(Player):
def __init__(self):
super().__init__("魔法使い")
def attack(self, enemy):
self.__spell()
print(self.name + "は、" + enemy + "に炎を放った!")
def __spell(self):
print("ズバーン!")
print("=== パーティーでスライムと戦う ===")
hero = Player("勇者")
warrior = Player("戦士")
wizard = Wizard()
party = [hero, warrior, wizard]
for member in party:
member.attack("スライム")
Player.summary()
datetimeオブジェクトを使う
from datetime import datetime, timedelta, timezone
#日本時間に設定
jst = timezone(timedelta(hours=9))
today = datetime.now(jst)
print(today)
print(today.year)
print(today.month)
print(today.day)
#データを成形
day = datetime.strptime("2030/01/10 06:02:19", "%Y/%m/%d %H:%M:%S")
print(day)
0 件のコメント:
コメントを投稿