最初のクラスを定義してみよう

学習の目標

本章では、以下の内容を学習します。

  • class文を使ったクラス定義の基本的な書き方を理解する
  • 簡単なクラスを実際に作成してみる
  • クラスからインスタンスを作成する方法を習得する
  • インスタンスの基本的な操作方法を学ぶ

class文の基本的な書き方

それでは、実際にクラスを定義してみましょう。Pythonでクラスを作るには、class文を使います。

まず、VS Codeで新しいファイル first_class.py を作成してください。そして、以下のコードを入力してみましょう。

# 最初のクラスを定義
class Dog:
    pass

このclass Dog:という書き方が、クラスを定義する基本的な形です。Dogの部分がクラス名になります。

クラス名は、他の変数名と区別するために、最初の文字を大文字にするのがPythonの慣習です。また、複数の単語を組み合わせる場合は、それぞれの単語の最初を大文字にします(例:BigDogSmallCat)。

passは、「何もしない」という意味の特別なキーワードです。今はまだクラスの中身を書かないので、一時的にpassを入れています。

インスタンスを作成してみよう

では、このクラスからインスタンスを作成してみましょう。同じファイルに以下のコードを追加してください。

# 最初のクラスを定義
class Dog:
    pass

# クラスからインスタンスを作成
my_dog = Dog()

# インスタンスの情報を表示
print(my_dog)
print(type(my_dog))

プログラムを実行してみましょう。

python first_class.py

実行結果は以下のようになります。

<__main__.Dog object at 0x...>
<class '__main__.Dog'>

my_dog = Dog()という書き方で、Dogクラスからインスタンスを作成しています。これは関数を呼び出すときと似ていますが、実際にはクラスから新しいオブジェクトを生成しているのです。

print(my_dog)の結果を見ると、Dog objectと表示されています。これは、my_dogDogクラスのインスタンス(オブジェクト)であることを示しています。

複数のインスタンスを作ってみよう

一つのクラスから、複数のインスタンスを作ることができます。コードを以下のように変更してみましょう。

# 最初のクラスを定義
class Dog:
    pass

# 複数のインスタンスを作成
dog1 = Dog()
dog2 = Dog()
dog3 = Dog()

# それぞれ異なるオブジェクトであることを確認
print(f"dog1: {dog1}")
print(f"dog2: {dog2}")
print(f"dog3: {dog3}")

# 同じかどうかを確認
print(f"dog1とdog2は同じ?: {dog1 is dog2}")
print(f"dog1とdog3は同じ?: {dog1 is dog3}")

このプログラムを実行すると、以下のような結果が表示されます。

dog1: <__main__.Dog object at 0x...>
dog2: <__main__.Dog object at 0x...>
dog3: <__main__.Dog object at 0x...>
dog1とdog2は同じ?: False
dog1とdog3は同じ?: False

それぞれのインスタンスは、同じDogクラスから作られていますが、異なるオブジェクトです。これは、同じ設計図(クラス)から作られた別々の家のようなものです。

もう少し実用的なクラスを作ってみよう

今度は、もう少し実用的なクラスを作ってみましょう。新しいファイル simple_person.py を作成して、以下のコードを入力してください。

# 人を表すクラス
class Person:
    def say_hello(self):
        print("こんにちは!")

ここで新しく登場したのが、def say_hello(self):という部分です。これはメソッドと呼ばれるもので、クラスの中に定義された関数のことです。

selfというパラメータは、少し特殊です。これは「自分自身」を表すパラメータで、メソッドを呼び出したインスタンス自身を指します。まだ詳しく理解する必要はありませんが、クラスの中でメソッドを定義するときは、必ず最初のパラメータにselfを書くことを覚えておいてください。

では、このクラスを使ってみましょう。同じファイルに以下のコードを追加してください。

# 人を表すクラス
class Person:
    def say_hello(self):
        print("こんにちは!")

# インスタンスを作成
person1 = Person()
person2 = Person()

# メソッドを呼び出し
person1.say_hello()
person2.say_hello()

プログラムを実行してみましょう。

python simple_person.py

実行結果は以下のようになります。

こんにちは!
こんにちは!

person1.say_hello()という書き方で、インスタンスのメソッドを呼び出すことができます。これは、文字列の.upper()メソッドを使ったときと同じ書き方ですね。

クラスとインスタンスの関係を確認しよう

最後に、クラスとインスタンスの関係をもう少し詳しく見てみましょう。以下のコードを追加してみてください。

# 人を表すクラス
class Person:
    def say_hello(self):
        print("こんにちは!")

# インスタンスを作成
person1 = Person()
person2 = Person()

# メソッドを呼び出し
person1.say_hello()
person2.say_hello()

# クラスとインスタンスの情報を確認
print(f"Person クラス: {Person}")
print(f"person1 インスタンス: {person1}")
print(f"person1 の型: {type(person1)}")
print(f"person1 は Person のインスタンス?: {isinstance(person1, Person)}")

このプログラムを実行すると、以下のような結果が表示されます。

こんにちは!
こんにちは!
Person クラス: <class '__main__.Person'>
person1 インスタンス: <__main__.Person object at 0x...>
person1 の型: <class '__main__.Person'>
person1 は Person のインスタンス?: True

isinstance(person1, Person)という関数を使うと、特定のオブジェクトが指定したクラスのインスタンスかどうかを確認できます。これは、後でより複雑なプログラムを書くときに役立つ機能です。

まとめ

本章では、Pythonで最初のクラスを定義する方法を学習しました。

class文を使ってクラスを定義し、そのクラスから複数のインスタンスを作成することができました。また、クラスの中にメソッドを定義することで、インスタンスに特定の動作をさせることも学びました。

重要なポイントは以下の通りです。

  • クラス名は最初の文字を大文字にする
  • クラス名()でインスタンスを作成する
  • 一つのクラスから複数のインスタンスを作ることができる
  • メソッドの最初のパラメータには必ずselfを書く
  • インスタンス名.メソッド名()でメソッドを呼び出す

次回は、クラスに属性を追加して、それぞれのインスタンスが異なるデータを持てるようにしてみましょう。

このセクションは有料サブスクリプションへの登録、またはログインが必要です。完全なコンテンツにアクセスするには、料金ページ(/pricing)をご覧ください。購入済みの場合は、ログインしてください。

Starterプランでより詳しく学習

この先のコンテンツを読むにはStarterプラン以上が必要です。より詳細な解説、実践的なサンプルコード、演習問題にアクセスして学習を深めましょう。

作成者:とまだ
Previous
オブジェクト指向の基本概念を理解しよう