【Python入門】初心者のためのクラス入門|initとインスタンスの基本を解説【レッスン5-1】

Lesson4ではPythonのデータ構造について学習してきました。
今回からオブジェクト指向編に入ります。このページはその入り口、クラスの基本について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数とスコープ編
Lesson4:データ構造編
Lesson5:オブジェクト指向編
・Lesson5-1:クラスの基本を理解しよう ◁今回はココ
・Lesson5-2:メソッドの基本を理解しよう
・Lesson5-3:カプセル化を理解しよう
・Lesson5-4:プロパティを理解しよう
・Lesson5-5:クラスの継承を理解しよう
・Lesson5-6:メソッドのオーバーライドを理解しよう
・Lesson5-7:静的メソッドを理解しよう
・Lesson5-8:モジュールを使いこなそう
・Lesson5-9:抽象クラスを理解しよう
・Lesson5-10:ミックスインを理解しよう
・Lesson5-11:データクラスを理解しよう
・練習問題5-1:モンスター捕獲ゲームを作ろう
・練習問題5-2:モンスターとのバトルゲームを作ろう
次のステップ:Pythonを用いたアプリ開発
クラスとは?|オブジェクト指向を始める第一歩
この章ではPythonにおける「クラス」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。
Pythonにおける「クラス」はオブジェクト指向プログラミングの基本概念です。
クラスは、関連するデータと機能(動作)をひとまとめにした設計図のような役割を果たすものです。
これをうまく使うことで複雑なプログラムを整理し、再利用可能なコードを作成することができます。
クラスの具体的な例として「動物(Animal)」をクラスとして考えてみます。
動物には共通の動作や特徴がありますが、それぞれの動物は異なる具体的な情報を持っています。このような状況をクラスを使って表現できます。
クラスの定義方法
クラスを定義するにはclass
キーワードを使います。以下が基本的なクラス定義の例です。
class Animal: def speak(self): return "The animal makes a sound"
このコードではAnimal
というクラスを定義しています。
クラス内にあるdef speak(self)
は、このクラスが持つ「機能」を定義しており、メソッドと呼ばれます。
すなわちこのコードは、Animalというクラスの中にspeakメソッドを定義しており、それを実行すると「The animal makes a sound」という文字列を返すコードです。
インスタンスの生成
クラスを定義した後、次に行うのはそのクラスから「インスタンス」(オブジェクト)を作成することです。
インスタンスとはクラスの実体であり、具体的なデータや動作を持ちます。
クラス = データや動作を書いた設計図。クラス自体は動作しない。
インスタンス = クラスから作られる、実際に動作するプログラム。
以下の例ではAnimal
クラスのインスタンスを作成し、そのメソッドを呼び出しています。
# Animalクラスを作成 class Animal: def speak(self): return "The animal makes a sound" # Animalクラスのインスタンスを生成 my_animal = Animal() print(my_animal.speak()) # 出力: The animal makes a sound
ここではAnimal
クラスからmy_animal
というインスタンスを作成し、そのインスタンスに対してspeak
メソッドを呼び出しています。
すなわち7行目でAnimalという設計図からmy_animalというインスタンスが作られ(Animalと同じ構造のmy_animalが作られ)、8行目でmy_animal内のspeakメソッドが呼び出されて出力されています。
なお、メソッドを使う際には上記のようにリストの変数名の後に ドット(.) を付け、その後にメソッド名を書きます。
また2行目のself
という特別な引数はインスタンス自身を指しています。
クラスを使った例
次にもう少し実用的な例を見てみましょう。
ここではDog
というクラスを定義し、その中に「吠える(speak)」と「走る(run)」という2つのメソッドを追加しています。
class Dog: def speak(self): return "Woof!" def run(self): return "The dog is running" # Dogクラスのインスタンスを生成 my_dog = Dog() print(my_dog.speak()) # 出力: Woof! print(my_dog.run()) # 出力: The dog is running
Dog
クラスにはrun
とspeak
という2つのメソッドがあります。
これらのメソッドは、my_dog
というインスタンスに関連して呼び出され、異なる動作を行います。
このようにクラスに複数のメソッドを定義することで、1つのインスタンスに複数の動作を持たせることができます。
__init__メソッド
クラスを定義するときに、インスタンスが作成される際に特定の初期化処理を行うことができます。
この初期化処理を行うのが__init__
メソッドです。__init__
メソッドは、インスタンスが作成されるときに自動的に呼び出され、初期設定を行います。
例えば、下記のコードのCat
クラスではインスタンスごとに異なる名前を与えるために__init__
メソッドを使います。
class Cat: def __init__(self, name): self.name = name def speak(self): return f"{self.name} says Meow" # Catクラスのインスタンスを生成 my_cat = Cat("Whiskers") print(my_cat.speak()) # 出力: Whiskers says Meow
この例では、__init__
メソッドがname
という属性を初期化しています。
つまりインスタンスmy_cat
が作成されたとき、「Whiskers」という名前が設定され、その名前を使ってメソッドspeak
が実行されます。
__init__
メソッドを使うことで、クラスが持つデータをインスタンスごとに柔軟に設定することができます。
まとめ
クラスはデータと動作をひとまとめにした設計図の役割を果たし、複雑なプログラムを整理して作成するのに役立ちます。
また、__init__
メソッドを使うことで、インスタンス作成時に初期化処理を行い、個別のデータを設定することができます。
次回の記事ではクラス内で定義される「メソッド」についてもう少し詳しく解説し、メソッドの定義方法や使い方を学びます。
クラスの概念が理解できたら、ぜひメソッドについても学び進めましょう。
練習問題:クラスとインスタンスの使い方を学ぼう
クラスとインスタンスの仕組みを学ぶために、動物が自己紹介をするプログラムを作成してください。
プログラムでは、動物の名前を設定し、自己紹介を行うメソッドを持つ「Animal」クラスを定義します。
その後、「ネコ」や「イヌ」といった具体的な動物のインスタンスを作成し、それぞれが自己紹介を行います。
問題の詳細条件
以下の要件に従ってコードを完成させてください。
Animal
というクラスを定義し、そのクラスには動物の名前を設定する__init__
メソッドを持たせること。introduce
メソッドを定義し、動物が「こんにちは!私は○○です。」と自己紹介できるようにすること。Animal
クラスのインスタンスを作成し、introduce
メソッドを呼び出して動物が自己紹介できること。- 「ネコ」と「イヌ」のインスタンスを作成し、それぞれが自己紹介を行うこと。
ただし、以下のような実行結果となるコードを書くこと。
こんにちは!私はネコです。 こんにちは!私はイヌです。
【ヒント】難しいと感じる人だけ見よう
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:Animalクラスの定義
□ __init__メソッドの定義
□ □ インスタンス変数nameに引数nameを代入
□ introduceメソッドの定義
□ □ return文にてf文字列を使って「こんにちは!私は{self.name}です。」を返す
2:Animalクラスのインスタンスcatを「ネコ」で作成し、変数catに代入
3:Animalクラスのインスタンスdogを「イヌ」で作成し、変数dogに代入
4:printにてcatのintroduceメソッドを呼び出し、自己紹介を出力
5:printにてdogのintroduceメソッドを呼び出し、自己紹介を出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
# 動物クラスの定義 class Animal: def __init__(self, name): """【穴埋め問題1】 ここでインスタンス変数nameに引数nameを代入するコードを書いてください。 """ def introduce(self): """【穴埋め問題2】 ここで動物の自己紹介をするメソッドを定義し、インスタンス変数nameを使用して 自己紹介の文を返すコードを書いてください。 """ # Animalクラスのインスタンスを作成 cat = Animal("ネコ") dog = Animal("イヌ") # インスタンスが持つメソッドを呼び出して、自己紹介を表示 """【穴埋め問題3】 ここでprint文を使い、catとdogのintroduceメソッドを呼び出して自己紹介を表示するコードを書いてください。 """
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
問題の答え合わせと解説
この問題の一つの正解例とそのコードの解説を以下に示します。
一つの正解例
例えば以下のようなプログラムが考えられます。
- 正解コード
-
# 動物クラスの定義 class Animal: def __init__(self, name): # インスタンス変数nameに動物の名前を設定する self.name = name def introduce(self): # 動物の自己紹介をするメソッド return f"こんにちは!私は{self.name}です。" # Animalクラスのインスタンスを作成 cat = Animal("ネコ") dog = Animal("イヌ") # インスタンスが持つメソッドを呼び出して、自己紹介を表示 print(cat.introduce()) # 出力: こんにちは!私はネコです。 print(dog.introduce()) # 出力: こんにちは!私はイヌです。
正解例の詳細解説
正解コードの解説をブロックごとに書いていきます。
- 詳細解説
-
動物クラスの定義
class Animal: def __init__(self, name): self.name = name
まず
class Animal
という部分で「Animal」という新しいクラスを定義しています。このクラスを使うと特定の動物(例:ネコやイヌ)に関連するデータや動作を管理できます。
次に
__init__
というメソッドが登場します。このメソッドの中で、
self.name = name
と書かれており、動物の名前(例えば「ネコ」や「イヌ」)をインスタンス変数として保存します。このインスタンス変数
self.name
は、その動物の名前を記憶する役割を果たします。自己紹介のメソッド
def introduce(self): return f"こんにちは!私は{self.name}です。"
introduce
というメソッドはクラス内で定義された関数です。このメソッドを使うことで、動物が「こんにちは!私は○○です。」と自己紹介できるようになります。
self.name
の部分で、その動物の名前が表示されます。クラスのインスタンスを作成
cat = Animal("ネコ") dog = Animal("イヌ")
ここでは
Animal
クラスを使って「ネコ」と「イヌ」という2つの動物のインスタンスを作成しています。この時
Animal("ネコ")
のようにクラスを呼び出すことで、__init__
メソッドが実行され、名前が設定されます。この「ネコ」や「イヌ」が、それぞれ
cat
とdog
という変数に保存されます。自己紹介を表示する
print(cat.introduce()) # 出力: こんにちは!私はネコです。 print(dog.introduce()) # 出力: こんにちは!私はイヌです。
最後に
cat.introduce()
とdog.introduce()
を呼び出して、それぞれの動物が自己紹介をするようにしています。このとき
introduce
メソッドが実行され、print
文でその結果が表示されます。まとめ
このコードではPythonの「クラス」という機能を使って、動物が自己紹介をするプログラムを作りました。
クラスは複数の関連するデータや機能をまとめるのに便利です。今回の例では、動物の名前を管理し、自己紹介を行うメソッドを提供しました。
クラスを使うことで、コードを再利用しやすくし、プログラム全体を整理しやすくすることができます。
クラスの理解はオブジェクト指向プログラミングの基礎となる重要な概念ですので、ぜひ今回の内容をしっかりと復習してください。
FAQ|Pythonクラスの基本
- Q1. Pythonのクラスと関数はどう違いますか?
-
クラスは複数の関数や変数をまとめて管理できる構造で、データと処理を一体化できます。一方、関数は単体の処理単位です。オブジェクト指向を使いたい場合はクラスを選ぶのが基本です。
- Q2. initメソッドはなぜ必要なのですか?
-
initメソッドはインスタンス生成時に自動で呼び出され、初期化処理を行う特別なメソッドです。オブジェクトごとの初期設定が必要な場合に非常に便利です。
- Q3. クラスを使うと何が便利になりますか?
-
クラスを使うと、再利用性の高いコードが書けるようになり、大規模なプログラムの構造を整理しやすくなります。例えば、複数の似た機能を持つオブジェクトを簡単に作成できます。
質問用コンタクトフォーム
この記事はAIを用いて書いた記事です。
人間の目による確認も行っていますが、もし間違い等ありましたらご指摘頂けると大変助かります。