【6日でできるPython入門】クラス①

Pythonでは、クラスを使うことで自分だけの「型」を作ることができます。
 今までint型やstr型、list型などの組み込み型を使ってきましたが、クラスを使えば「独自の設計図=型」を自由に作成できるようになります。クラスはデータと処理をまとめて一つに管理することができ、複雑なプログラムも整理しやすくなります。ここでは、クラスの基本構文と、インスタンスの作り方、属性・メソッドの扱い方をしっかり学びます。

1.クラスの基本構文とインスタンス化

1.1. クラスの定義とインスタンス化

クラスはclassキーワードで定義します。

ファイル名: lesson20-1.py

class Animal:
    pass  # まだ中身は未定

dog = Animal()
cat = Animal()
print(type(dog))
print(type(cat))

実行結果

<class '__main__.Animal'>
<class '__main__.Animal'>

解説

  • class Animal: で新しい型を作成します。
  • passは「何もしない」ダミー命令で、中身を後で追加する場合によく使います。
  • dog = Animal()インスタンス化し、独立したデータが作られます。

1.2. __init__メソッドによる初期化

インスタンス化の際に値を渡し、属性をセットできます。

ファイル名: lesson20-2.py

class Animal:
    def __init__(self, name, sound):
        self.name = name      # インスタンス属性
        self.sound = sound

tiger = Animal("トラ", "ガオー")
print(f"{tiger.name}は「{tiger.sound}」と鳴きます。")

実行結果

トラは「ガオー」と鳴きます。

解説

  • __init__は「イニシャライザ」と呼ばれ、インスタンス作成時に自動で実行される特別なメソッドです。
  • self.nameself.soundのように、「そのインスタンス固有の属性」を設定できます。

2.メソッド・属性・self

2.1. インスタンスメソッドの定義と呼び出し

クラスの中で関数を定義すると「メソッド」になります。
メソッドは「インスタンス.メソッド名()」で呼び出します。

ファイル名: lesson20-3.py

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

    def greet(self):
        print(f"こんにちは、私は{self.name}です。")

    def speak(self):
        print(f"{self.sound}!と鳴きます。")

panda = Animal("パンダ", "フンフン")
panda.greet()
panda.speak()

実行結果

こんにちは、私はパンダです。
フンフン!と鳴きます。

解説

  • メソッドの第1引数は必ずselfです(インスタンス自身を指します)。
  • インスタンス属性(nameやsound)はself.属性名でアクセスします。

2.2. インスタンス属性の変更と動作

インスタンスごとに属性値を変更できます。

ファイル名: lesson20-4.py

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

    def greet(self):
        print(f"こんにちは、私は{self.name}です。")

    def speak(self):
        print(f"{self.sound}!と鳴きます。")

elephant = Animal("ゾウ", "パオーン")
elephant.speak()
elephant.sound = "バオーン"  # 属性を書き換え
elephant.speak()

実行結果

パオーン!と鳴きます。
バオーン!と鳴きます。

解説

  • インスタンス属性は「インスタンス.属性名 = 値」でいつでも変更可能です。
  • 属性を変更すれば、同じメソッドでも違う動作になります。

3.クラスの利用とまとめ表

3.1. インスタンスを複数作って管理する

ファイル名: lesson20-5.py

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

    def greet(self):
        print(f"こんにちは、私は{self.name}です。")

    def speak(self):
        print(f"{self.sound}!と鳴きます。")

animals = [
    Animal("イヌ", "ワンワン"),
    Animal("ネコ", "ニャー"),
    Animal("カエル", "ゲロゲロ")
]

for a in animals:
    a.greet()
    a.speak()

実行結果

こんにちは、私はイヌです。
ワンワン!と鳴きます。
こんにちは、私はネコです。
ニャー!と鳴きます。
こんにちは、私はカエルです。
ゲロゲロ!と鳴きます。

3.2. クラスとインスタンスの用語まとめ

用語概要
クラス設計図。新しい型(データの型・動作)を定義class Animal: ...
インスタンスクラスから作成される実体dog = Animal()
属性インスタンスごとに持つ値(データ)self.name, self.sound
メソッドインスタンス専用の関数。selfを最初の引数に持つdef greet(self): ...
インスタンス化クラスからインスタンス(実体)を作る操作tiger = Animal("トラ", "ガオー")

ここでは、クラスの基本とインスタンス、属性、メソッドの仕組みを学びました。
次は、クラスを使ったより高度な設計やカスタマイズについて学んでいきます。