【Python】クラスの基本!__init__・self・継承まで初心者向けに徹底解説

Pythonクラスの基本解説

※このサイトの記事内では広告を掲載している場合があります。

「Pythonで関数や辞書は書けるようになったけれど、クラスが出てきた途端に分からなくなった……」という声は、初心者の方からとてもよく聞きます。self や __init__ といった見慣れない言葉が並ぶので、最初はとっつきにくく感じますよね。

この記事では、現役SEの運営者が、Pythonのクラスを「設計図」というイメージから順番に解説します。基本の書き方、__init__ と self、メソッド、__str__、継承までを、実際に動くコードと実行結果つきで説明しますので、一緒に手を動かしてみてください。

クラスとは?「設計図」と「実物」で考えよう

クラスとは、データ(属性)とそのデータを扱う処理(メソッド)をひとまとめにした「設計図」です。たとえば「犬」という設計図があれば、そこから「ポチ」「ハチ」といった実物(インスタンス)をいくつでも作れます。

  • クラス:設計図(例:Dog)
  • インスタンス:設計図から作った実物(例:ポチ)
  • 属性:インスタンスが持つデータ(例:名前、年齢)
  • メソッド:インスタンスができる動作(例:吠える)

関数だけで書くとデータと処理がバラバラになりがちですが、クラスを使うと「関連するものを1か所にまとめる」ことができ、プログラムが大きくなっても整理しやすくなります。関数の基本に自信がない方は、先にPythonの関数(def)の書き方を確認しておくとスムーズです。

クラスの基本の書き方:__init__ と self

まずは最小限のクラスを見てみましょう。

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

    def bark(self):
        print(f"{self.name}:ワンワン!")


pochi = Dog("ポチ", 3)
print(pochi.name)  # ポチ
print(pochi.age)   # 3
pochi.bark()       # ポチ:ワンワン!

__init__ は「作られるときに最初に呼ばれる」メソッド

__init__ は初期化メソッド(コンストラクタ)と呼ばれ、Dog(“ポチ”, 3) のようにインスタンスを作った瞬間に自動で実行されます。ここで名前や年齢といった初期データを受け取って保存します。

self は「そのインスタンス自身」

self は「いま操作しているインスタンス自身」を指します。self.name = name と書くことで、そのインスタンス専用の属性として名前が保存されます。メソッドを定義するときは、第1引数に必ず self を書くのがルールです(呼び出すときは書きません)。

ここまでで、クラスの土台はおしまいです。独学で「self がどうしても腑に落ちない」と詰まったときは、現役エンジニアに質問できる環境があると一気に進みます。学習方法の選び方は【徹底比較】Pythonが学べるプログラミングスクールの選び方で比較軸をまとめていますので、独学で伸び悩んだら参考にしてください。

インスタンスはいくつでも作れる

同じ設計図から作ったインスタンスは、それぞれ独立したデータを持ちます。

pochi = Dog("ポチ", 3)
hachi = Dog("ハチ", 5)

pochi.bark()  # ポチ:ワンワン!
hachi.bark()  # ハチ:ワンワン!
print(pochi.age)  # 3
print(hachi.age)  # 5

メソッドで属性の値を変えてみよう

メソッドの中で self の属性を書き換えると、そのインスタンスの状態が変わります。カウンターを例に見てみます。

class Counter:
    def __init__(self):
        self.count = 0

    def increment(self):
        self.count += 1
        return self.count


c = Counter()
c.increment()
c.increment()
print(c.count)  # 2

「状態(count)」と「それを変える処理(increment)」がセットになっているのがクラスの便利なところです。辞書でデータを管理する方法と比べてみたい方は、Pythonの辞書(dict)の使い方もあわせて読むと違いが分かりやすくなります。

__str__ で print の表示を分かりやすくする

クラスのインスタンスをそのまま print すると、__main__.Book object at 0x…> のような分かりにくい表示になります。__str__ メソッドを定義すると、表示内容を自由に決められます。

class Book:
    def __init__(self, title, price):
        self.title = title
        self.price = price

    def __str__(self):
        return f"{self.title}({self.price}円)"


book = Book("Python入門", 2000)
print(book)  # Python入門(2000円)

継承:既存のクラスを引き継いで拡張する

継承を使うと、既存のクラス(親クラス)の機能を引き継いだ新しいクラス(子クラス)を作れます。同じ処理を何度も書かずに済み、必要な部分だけ上書き(オーバーライド)できます。

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

    def speak(self):
        print(f"{self.name}は鳴きます")


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


Animal("ゾウ").speak()  # ゾウは鳴きます
Cat("タマ").speak()     # タマ:ニャー

Cat は __init__ を書いていませんが、親の Animal のものがそのまま使われています。speak だけを上書きしているのがポイントです。

初心者がつまずきやすいポイント

  • メソッドの第1引数の self を書き忘れる(TypeError の原因になります)
  • 属性を使うときに self. を付け忘れ、ただのローカル変数になってしまう
  • __init__ のアンダースコアは前後2つずつ(_init_ では動きません)
  • クラス名は大文字始まり(Dog など)にするのが慣習

もっと効率的にPythonを学びたい人へ

クラスは、読むだけでは理解しにくく、自分で書いてエラーを経験することで身につく分野です。「エラーの原因が分からない」「自分のコードが正しい設計か不安」という場合は、マンツーマンで質問できるスクールを使うのも一つの方法です。

Winスクールの「Python Winner」は、マンツーマン指導で未経験からPythonを学べ、転職サポートや無料カウンセリングにも対応しています。まずは無料カウンセリングで、自分に合うか確かめてみてはいかがでしょうか。

※本記事には広告(アフィリエイトリンク)を含みます。

Pythonプログラミング|マンツーマンレッスンで初めてをプロに育てる【Python Winner】

他のスクールとも比べて選びたい方は、スクールの比較記事もあわせてご覧ください。資格取得を目指す方はPython3エンジニア認定基礎試験の参考書比較も参考になります。

まとめ

  • クラスは「設計図」、インスタンスはそこから作る「実物」
  • __init__ で初期データを受け取り、self.属性名 で保存する
  • self は「そのインスタンス自身」を指し、メソッドの第1引数に必ず書く
  • メソッドで属性を書き換えると、インスタンスの状態を管理できる
  • __str__ を定義すると print の表示を分かりやすくできる
  • 継承を使えば、既存クラスを引き継いで必要な部分だけ上書きできる

まずはDogやCounterのような小さなクラスを自分で書いてみて、動かしながら慣れていきましょう。クラスが分かると、ライブラリのコードも読みやすくなります。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA