Pythonクラス入門:オブジェクト指向の基本をわかりやすく解説

Pythonのクラスとオブジェクト指向を初心者向けに解説。selfや__init__、継承などを実例で学べる入門記事。

Pythonクラスオブジェクト指向継承self__init__2026/5/25

はじめに

Pythonはオブジェクト指向言語であり、クラスを使うことでコードの再利用性や保守性を高められます。この記事では、Pythonのクラスの基本から、self__init__、継承までを実践的な例とともに解説します。

クラスとは

クラスはオブジェクトの設計図です。同じ属性やメソッドを持つオブジェクトを効率的に生成できます。

クラスの定義

class Dog:
    pass

passは何もしない文です。後で中身を追加します。

インスタンスの生成

dog1 = Dog()
print(dog1)  # <__main__.Dog object at 0x...>

__init__メソッド:コンストラクタ

インスタンス生成時に自動的に呼ばれるメソッドです。初期化に使います。

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

dog1 = Dog("ポチ", 3) print(dog1.name) # ポチ

selfパラメータ

selfはインスタンス自身を指します。メソッドの第一引数として必ず書きます。

class Dog:
    def __init__(self, name):
        self.name = name
    
    def bark(self):
        print(f"{self.name}がワン!")

dog1 = Dog("ポチ") dog1.bark() # ポチがワン!

メソッドの追加

クラスには自由にメソッドを追加できます。

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def human_age(self):
        return self.age * 7
    
    def info(self):
        print(f"名前: {self.name}, 年齢: {self.age}歳")

dog1 = Dog("ポチ", 3) dog1.info() # 名前: ポチ, 年齢: 3歳 print(dog1.human_age()) # 21

クラス変数とインスタンス変数

クラス変数は全インスタンスで共有、インスタンス変数は各インスタンス固有です。

class Dog:
    species = "イヌ"  # クラス変数
    
    def __init__(self, name):
        self.name = name  # インスタンス変数

dog1 = Dog("ポチ") dog2 = Dog("タロ") print(dog1.species) # イヌ print(dog2.species) # イヌ Dog.species = "犬" print(dog1.species) # 犬

継承

既存のクラスを基に新しいクラスを作れます。親クラスの機能を引き継ぎ、拡張できます。

class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        pass

class Dog(Animal): def speak(self): return f"{self.name}がワン!"

class Cat(Animal): def speak(self): return f"{self.name}がニャー!"

dog = Dog("ポチ") cat = Cat("タマ") print(dog.speak()) # ポチがワン! print(cat.speak()) # タマがニャー!

super()で親クラスのメソッドを呼ぶ

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # 親の__init__を呼ぶ
        self.breed = breed
    
    def speak(self):
        return f"{self.name}({self.breed})がワン!"

dog = Dog("ポチ", "柴犬") print(dog.speak()) # ポチ(柴犬)がワン!

特殊メソッド

__str____repr__など、ダブルアンダースコアで囲まれたメソッドです。

class Dog:
    def __init__(self, name):
        self.name = name
    
    def __str__(self):
        return f"Dog(name={self.name})"
    
    def __repr__(self):
        return f"Dog('{self.name}')"

dog = Dog("ポチ") print(dog) # Dog(name=ポチ) print(repr(dog)) # Dog('ポチ')

カプセル化

属性を外部から直接変更できないようにする技法です。Pythonでは慣習的にアンダースコアで保護します。

class Dog:
    def __init__(self, name):
        self._name = name  # 保護属性(慣習)
    
    def get_name(self):
        return self._name
    
    def set_name(self, name):
        if name:
            self._name = name

dog = Dog("ポチ") print(dog.get_name()) # ポチ dog.set_name("タロ") print(dog.get_name()) # タロ

プロパティ

@propertyデコレータを使うと、メソッドを属性のように扱えます。

class Dog:
    def __init__(self, name):
        self._name = name
    
    @property
    def name(self):
        return self._name
    
    @name.setter
    def name(self, value):
        if value:
            self._name = value

dog = Dog("ポチ") print(dog.name) # ポチ dog.name = "タロ" print(dog.name) # タロ

まとめ

Pythonのクラスは、__init__での初期化、selfによるインスタンス操作、継承による拡張が基本です。これらの概念をマスターすれば、より大規模で保守性の高いコードが書けるようになります。ぜひ実際にコードを書いて練習してみてください。