クラス定義とコンストラクタ(init)
Python
class Character:
# クラス変数(全インスタンス共通)
species = "Human"
def __init__(self, name, hp):
# インスタンス変数(個別保持)
self.name = name
self.hp = hp
def take_damage(self, amount):
self.hp -= amount
print(f"{self.name}は{amount}ダメージを受けた!(残りHP: {self.hp})")
メソッドの種類(@classmethod / @staticmethod)
Python
class Player:
def __init__(self, name):
self.name = name
# インスタンスメソッド
def show_info(self):
print(f"Player: {self.name}")
# クラスメソッド(クラス自体を操作・ファクトリメソッドに利用)
@classmethod
def create_guest(cls):
return cls("ゲスト")
# 静的メソッド(インスタンスやクラスの状態に依存しないユーティリティ)
@staticmethod
def is_valid_name(name):
return len(name) <= 10
継承と super() 関数・カプセル化
Python
class Hero(Character):
def __init__(self, name, hp, mp):
super().__init__(name, hp) # 親クラスのコンストラクタ実行
self.__mp = mp # プライベートメンバ (__で難読化)
@property
def mp(self):
"""ゲッター"""
return self.__mp
@mp.setter
def mp(self, value):
"""セッター(不正な値を防御)"""
if value < 0:
raise ValueError("MPは0以上にしてください")
self.__mp = value
特殊メソッド(ダブスタ/Dunder Method)
Python
class Book:
def __init__(self, title, price):
self.title = title
self.price = price
def __str__(self):
# print()時や文字列変換時の表示
return f"『{self.title}』({self.price}円)"
def __len__(self):
# len()適用時の動作
return len(self.title)
book = Book("Python完全マスター", 3000)
print(book) # 『Python完全マスター』(3000円)
print(len(book)) # 12

コメント