「pythonのコードでclassって書いてあるけど、これは何?」
「クラスを使うと何が良いのか分からない」
そんな疑問をお持ちのあなたへ。今回はクラスについて、初心者の方でも理解できるように詳しく説明していきます。
クラスは少しとっつきにくい概念ですが、覚えるとコードがすっきり整理できて、同じような処理を何度も書く手間が省ける便利な機能です。
この記事を読めば、クラスの基本的な使い方から実践的なテクニックまで身につけることができます。
クラスとは?「設計図」のようなもの

クラスとは、「オブジェクトの設計図」のことです。
例えば、車を作る時を考えてみましょう。
まず設計図を作って、その設計図をもとに実際の車を組み立てますよね。
pythonのクラスも同じような考え方です。
# 犬の設計図(クラス)を作る
class Dog:
def bark(self):
print("ワン!")
# 設計図をもとに実際の犬(インスタンス)を作る
pochi = Dog()
pochi.bark() # ワン!
ここで:
Dog
がクラス(設計図)pochi
がインスタンス(実際に作られたもの)
です。
クラスの基本的な書き方
クラスの基本的な構造はこのようになります:
class クラス名:
def __init__(self, 引数):
# 初期設定をする部分
self.属性名 = 値
def メソッド名(self):
# 処理内容を書く部分
重要なキーワードの説明
class
:クラスを作ることを宣言する__init__
:インスタンスを作る時に最初に実行される特別なメソッド(関数)self
:「そのインスタンス自身」を表す(必ず書く必要がある)
実際にクラスを作ってみよう

「人」を表すクラスを作ってみましょう:
class Person:
def __init__(self, name, age):
# 初期設定:名前と年齢を覚える
self.name = name
self.age = age
def greet(self):
# 挨拶をする機能
print(f"こんにちは、私は{self.name}です。{self.age}歳です。")
def have_birthday(self):
# 誕生日を迎える機能
self.age += 1
print(f"誕生日おめでとう!{self.age}歳になりました。")
クラスを使ってみる
# 太郎さんを作る
taro = Person("太郎", 25)
# 太郎さんに挨拶してもらう
taro.greet() # こんにちは、私は太郎です。25歳です。
# 太郎さんの誕生日
taro.have_birthday() # 誕生日おめでとう!26歳になりました。
# 花子さんも作ってみる
hanako = Person("花子", 30)
hanako.greet() # こんにちは、私は花子です。30歳です。
なぜクラスを使うと良いのか?

関連する情報をまとめられる
クラスを使わない場合:
# バラバラに管理
taro_name = "太郎"
taro_age = 25
hanako_name = "花子"
hanako_age = 30
# 関数もバラバラ
def greet_taro():
print(f"こんにちは、私は{taro_name}です。")
def greet_hanako():
print(f"こんにちは、私は{hanako_name}です。")
クラスを使った場合:
# 情報と機能がまとまっている
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"こんにちは、私は{self.name}です。")
# 簡単に複数の人を作れる
taro = Person("太郎", 25)
hanako = Person("花子", 30)
同じ処理を何度も書かなくて済む
一度クラスを作れば、同じような「人」をいくらでも作ることができます。
コードが整理されて読みやすくなる
関連する情報と機能がまとまっているので、何をしているのか分かりやすくなります。
メソッドの種類
pythonのクラスには3種類のメソッドがあります:
インスタンスメソッド(一番よく使う)
class Calculator:
def __init__(self, value):
self.value = value
def add(self, num): # インスタンスメソッド
self.value += num
return self.value
calc = Calculator(10)
result = calc.add(5) # 15
クラスメソッド
class Person:
count = 0 # クラス変数
def __init__(self, name):
self.name = name
Person.count += 1
@classmethod
def get_count(cls): # クラスメソッド
return cls.count
person1 = Person("太郎")
person2 = Person("花子")
print(Person.get_count()) # 2
スタティックメソッド
class MathUtils:
@staticmethod
def add(a, b): # スタティックメソッド
return a + b
result = MathUtils.add(3, 5) # 8
よくある間違いと注意点

selfを書き忘れる
# 間違い
class Person:
def greet(): # selfがない
print("こんにちは")
# 正しい
class Person:
def greet(self): # selfを書く
print("こんにちは")
インスタンスを作らずにメソッドを呼ぶ
# 間違い
class Person:
def greet(self):
print("こんにちは")
Person.greet() # エラーになる
# 正しい
person = Person() # インスタンスを作る
person.greet() # インスタンスのメソッドを呼ぶ
__init__で初期化を忘れる
# 間違い
class Person:
def __init__(self, name):
pass # 何もしていない
def greet(self):
print(f"こんにちは、{self.name}です") # nameが設定されていない
# 正しい
class Person:
def __init__(self, name):
self.name = name # 初期化する
def greet(self):
print(f"こんにちは、{self.name}です")
実践的な例:銀行口座クラス
もう少し実用的な例として、銀行口座を管理するクラスを作ってみましょう:
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner # 口座名義
self.balance = balance # 残高
def deposit(self, amount):
# お金を預ける
if amount > 0:
self.balance += amount
print(f"{amount}円を預金しました。残高:{self.balance}円")
else:
print("預金額は0円より大きくしてください")
def withdraw(self, amount):
# お金を引き出す
if amount > self.balance:
print("残高が不足しています")
elif amount > 0:
self.balance -= amount
print(f"{amount}円を引き出しました。残高:{self.balance}円")
else:
print("引き出し額は0円より大きくしてください")
def show_balance(self):
# 残高を確認する
print(f"{self.owner}さんの残高:{self.balance}円")
# 使ってみる
account = BankAccount("田中", 1000)
account.show_balance() # 田中さんの残高:1000円
account.deposit(500) # 500円を預金しました。残高:1500円
account.withdraw(200) # 200円を引き出しました。残高:1300円
よくある質問

- Qなぜselfが必要なの?
- A
pythonでは、どのインスタンスの情報を使うかを明確にするために、必ずselfを書く決まりになっています。
- Q__init__はいつ実行されるの?
- A
クラス名()
でインスタンスを作る時に自動的に実行されます。
- Qクラスと辞書はどう使い分ければ良い?
- A
単純なデータの保存なら辞書で十分ですが、データに関連する処理もまとめたい場合はクラスを使いましょう。
- Qクラス名の付け方にルールはある?
- A
慣習として、クラス名は大文字で始めて、単語の区切りも大文字にします(例:
BankAccount
、UserData
)。
まとめ
pythonのクラスは、関連する情報と処理をひとまとめにできる便利な機能です。
おさらい:
- クラスは「設計図」、インスタンスは「実際に作られたもの」
__init__
で初期設定、self
で自分自身を表す- メソッドを使って、データに関連する処理をまとめられる
- 同じような処理を何度も書く必要がなくなる
コメント