【初心者向け】Pythonのクラスとは?基本から使い方まで分かりやすく解説!

python

「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:「そのインスタンス自身」を表す(必ず書く必要がある)

initメソッドは最初に実行されるメソッドで、値の初期設定などを行う。

実際にクラスを作ってみよう

「人」を表すクラスを作ってみましょう:

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

慣習として、クラス名は大文字で始めて、単語の区切りも大文字にします(例:BankAccountUserData)。

まとめ

pythonのクラスは、関連する情報と処理をひとまとめにできる便利な機能です。

おさらい:

  • クラスは「設計図」、インスタンスは「実際に作られたもの」
  • __init__で初期設定、selfで自分自身を表す
  • メソッドを使って、データに関連する処理をまとめられる
  • 同じような処理を何度も書く必要がなくなる

コメント

タイトルとURLをコピーしました