Section 1 / 9
Pythonのクラスとオブジェクトの基本
プログラミングを学ぶ上で、最初につまずきやすいテーマのひとつが「クラスとオブジェクト」です。
これはオブジェクト指向プログラミング(OOP)の中心的な考え方であり、Pythonでも広く使われています。
今回は、IT初心者の方でも理解しやすいように、Pythonのサンプルコードを交えながら「クラスとオブジェクトの基本」を解説していきます。
クラスとは何か?
クラスとは、簡単に言うと「オブジェクトを作るための設計図」です。
例えば、犬を表すプログラムを作りたいとき、「犬」という共通の特徴や行動(名前・年齢・吠えるなど)を定義しておけば、それを元にして複数の犬を自由に生成できます。 クラスを使うことで、同じ構造を持つオブジェクトを効率的に作ることができるのです。
Pythonでは、クラスは次のように定義します。
class Dog:
pass # クラスの内容を後で追加します
ここでは「Dog」という名前のクラスを定義しました。 pass は「何もしない」という意味で、クラスの中身を後から追加できるようにしています。
最初のステップとしては、空のクラスを作ることから始められます。
オブジェクトとは何か?
オブジェクトとは、クラスを基にして実際に作られた“実体”のことです。 クラスが「設計図」なら、オブジェクトは「設計図から作られた製品」だと考えるとわかりやすいでしょう。
例えば「Dog」というクラスから「ポチ」や「ハナ」といった具体的な犬のオブジェクトを作ることができます。
クラスに属性とメソッドを追加する
クラスがただの設計図だけでは役に立ちません。
そこで、犬の「名前」や「年齢」といった属性(データ)、さらに「吠える」というメソッド(動作を表す関数)を追加してみましょう。
class Dog:
# クラス属性(全てのインスタンスで共有される)
species = "Canis familiaris"
# コンストラクタ:オブジェクト生成時に呼ばれるメソッド
def __init__(self, name, age):
# インスタンス属性(各インスタンス固有のデータ)
self.name = name
self.age = age
# メソッド:オブジェクトが実行できる操作
def bark(self):
return f"{self.name} says woof!"
このコードでは、すべての犬に共通する「species(種)」というクラス属性を定義しています。
また、__init__ というコンストラクタで「名前」と「年齢」をオブジェクトごとに設定できるようにしています。コンストラクタについては、次回以降の講座で詳しく解説します。
さらに bark メソッドを追加し、犬が吠える様子を表現できるようにしました。
オブジェクトの生成と利用
実際にクラスからオブジェクトを作り、属性やメソッドを使ってみましょう。
#クラスの定義
class Dog:
# クラス属性(全てのインスタンスで共有される)
species = "Canis familiaris"
# コンストラクタ:オブジェクト生成時に呼ばれるメソッド
def __init__(self, name, age):
# インスタンス属性(各インスタンス固有のデータ)
self.name = name
self.age = age
# メソッド:オブジェクトが実行できる操作
def bark(self):
return f"{self.name} says woof!"
# Dogクラスのインスタンスを生成
my_dog = Dog("ポチ", 3)
your_dog = Dog("ハナ", 5)
print(my_dog.name) # 出力: ポチ
print(your_dog.age) # 出力: 5
print(Dog.species) # 出力: Canis familiaris
print(my_dog.species) # 出力: Canis familiaris
print(my_dog.bark()) # 出力: ポチ says woof!
print(your_dog.bark()) # 出力: ハナ says woof!
この例では「ポチ」と「ハナ」という2匹の犬をオブジェクトとして生成しました。
それぞれのオブジェクトは自分の名前や年齢を持っており、同じクラスから作られているので「species」という共通のクラス属性も利用できます。
さらに bark メソッドを呼び出すと、それぞれの犬が固有の名前で吠える動作を表現します。
クラスとオブジェクトのまとめ
今回学習した内容は以下の通りです。
- クラスは「オブジェクトの設計図」であり、属性とメソッドを定義する場所です。
- オブジェクトはクラスから生成された実体で、実際に動作するデータや機能を持ちます。
- インスタンス属性はオブジェクトごとに異なるデータを保存し、クラス属性はすべてのオブジェクトで共有されます。
メソッドはオブジェクトができる動作を定義し、プログラムの再利用性や表現力を高めます。
Pythonでのオブジェクト指向プログラミングは、データと機能をまとめて扱える強力な方法です。
最初は難しく感じるかもしれませんが、実際にクラスを定義してオブジェクトを作ってみると理解が深まります。