mei_13のPython講座 ロゴ

【解説】Pythonの「クラス」をマスターしよう:データと機能をひとつにまとめる魔法の設計図




Pythonの「クラス」をマスターしよう:データと機能をひとつにまとめる魔法の設計図


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。今日はPythonの中でも、少しだけ難しく感じてしまうかもしれない「クラス」という概念について、一緒にお話ししてみたいと思います。 プログラミングを始めたばかりだと、「なぜクラスが必要なの?」と思うこともあるかもしれませんが、これを使えるようになると、コードがとても整理されて、まるで魔法のように扱いやすくなるんですよ。 わたしも、最初は少し戸惑った記憶がありますが……ゆっくり説明していくので、安心してくださいね。


Hirokiのアイコン
【Hiroki】 Yukiさん、こんにちは!よろしくお願いします。 「クラス」って、よく本やサイトで「設計図」に例えられているやつですよね? なんとなくイメージはできるんですけど、実際に自分で書こうとすると、どう書けばいいのか、何のためにあるのか分からなくなっちゃうんです。


Yukiのアイコン
【Yuki】 そうですよね。概念だけ聞くと抽象的で、少し捉えどころがないかもしれません。 でも、実はクラスは「関連するデータと処理を、一つの箱にまとめておくための仕組み」だと考えると、少し分かりやすくなると思います。 今日は、基礎から最新のAIライブラリでの使われ方まで、丁寧にお伝えしますね。

クラスって何?:プログラミングの中の「設計図」


Yukiのアイコン
【Yuki】 まず、クラスの考え方を整理してみましょう。 Hirokiくんが言う通り、クラスはよく「設計図」に例えられます。 例えば、「車」というクラス(設計図)があったとします。 設計図には、「色は何か」「最高速度はどれくらいか」といった属性(データ)と、「走る」「止まる」といった動作(処理)が定義されています。


Hirokiのアイコン
【Hiroki】 なるほど。設計図自体は「概念」のようなもので、実際に道路を走っている「実物の車」とは違うということですよね?


Yukiのアイコン
【Yuki】 その通りです。素晴らしいですね……。 その設計図から作られた実物のことを、プログラミングの世界では「インスタンス」と呼びます。 一つの設計図から、赤い車、青い車、速い車など、たくさんの実体を作ることができるんです。 これが、クラスを利用する最大のメリットの一つである「再利用性」に繋がります。

クラスの基本構造:class構文とselfの秘密


Yukiのアイコン
【Yuki】 では、実際にPythonでどう書くかを見てみましょう。 まずは、一番シンプルなクラスの書き方です。

class Student:
    def __init__(self, name, grade):
        self.name = name
        self.grade = grade

    def introduce(self):
        print(f"僕は{self.name}です。{self.grade}年生です。")


Hirokiのアイコン
【Hiroki】 あ、classっていうキーワードを使うんですね。 でも、この__init__とか、あちこちに出てくるselfっていうのが、正直よく分からないんです……。


Yukiのアイコン
【Yuki】 ふふ、そこが最初の壁ですよね。わたしも最初は、なぜ自分自身を指す言葉をわざわざ書くんだろうって思いました。 __init__は「コンストラクタ」と呼ばれる特別なメソッドで、インスタンスが作られた瞬間に自動的に実行される初期設定のようなものです。 そして、selfは「作られた自分自身」を指しています。


Hirokiのアイコン
【Hiroki】 「自分自身」……ですか?


Yukiのアイコン
【Yuki】 はい。例えば、Hirokiくんというインスタンスが作られたとき、self.nameは「Hirokiくんの名前」という意味になります。 これがあるおかげで、複数のインスタンスを作ったときに、それぞれのデータが混ざらずに済むんです。 クラスという大きな枠組みの中で、「これは僕自身のデータですよ」と目印を付けているようなものだと思ってください。

インスタンス化:設計図から実体を生み出す


Yukiのアイコン
【Yuki】 次に、その設計図から実際にデータを作ってみましょう。これを「インスタンス化」と言います。

# インスタンスの作成
hiroki = Student("Hiroki", 2)
yuki = Student("Yuki", 4)

# メソッドの呼び出し
hiroki.introduce()
yuki.introduce()


Hirokiのアイコン
【Hiroki】 あ、関数を呼び出すみたいに書けるんですね! hiroki = Student("Hiroki", 2)と書くことで、__init__が動いて、僕専用のデータがセットされる……という感じでしょうか。


Yukiのアイコン
【Yuki】 その通りです。よく理解されていますね。 hiroki.introduce()と呼び出すと、内部ではselfhirokiというインスタンス自体が渡されるので、ちゃんと「僕はHirokiです」と表示される仕組みになっています。 データ(属性)と振る舞い(メソッド)が、一つの変数の中にセットで入っている。これがクラスの大きな特徴です。

メソッドの追加:クラスに「振る舞い」を教える


Hirokiのアイコン
【Hiroki】 データの持ち方は分かりました。 でも、ただデータを表示するだけなら辞書(dict)とかでも良さそうですけど、クラスを使う強みって他に何があるんですか?


Yukiのアイコン
【Yuki】 鋭い質問ですね……。 クラスの本当の強みは、そのデータを使った「専用の機能」を持たせられることにあると思います。 例えば、テストの点数を管理して、平均点を出したり、合否を判定したりする機能をクラスの中に閉じ込めることができます。

class Student:
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def check_pass(self):
        if self.score >= 60:
            return "合格"
        else:
            return "不合格"

student_a = Student("田中", 85)
print(f"{student_a.name}さんの結果は{student_a.check_pass()}です。")


Hirokiのアイコン
【Hiroki】 なるほど! check_passという処理が、Studentというデータと密接に関係していることが一目で分かりますね。 これなら、コードが大きくなっても、どこに何の処理が書いてあるか迷わなそうです。


Yukiのアイコン
【Yuki】 そうなんです。関連するものをひとまとめにすることを「カプセル化」と言ったりしますが、これによってコードの見通しが良くなるんです。 大人数で開発するときや、将来の自分自身がコードを読み返すときに、きっと助けになってくれるはずですよ。

最新のAI開発でも使われるクラス:Googleの「google-genai」ライブラリを例に


Yukiのアイコン
【Yuki】 さて、もう少し具体的な、現代的な例も見てみましょう。 最近のAI(人工知能)を扱うプログラムでも、クラスの考え方は欠かせません。 例えば、Googleの最新AIモデルを利用するための「google-genai」というライブラリがあります。 最新の gemini-3-flash-preview モデルを使う場合も、クラスを使ってAIの「クライアント(接続者)」を定義するのが一般的です。


Hirokiのアイコン
【Hiroki】 最新のAIライブラリでもクラスが使われているんですね! どんな風に書くのか気になります。


Yukiのアイコン
【Yuki】 少し発展的ですが、クラスを使って「AIアシスタント」を定義するコードを書いてみますね。 現在の最新仕様に基づくと、以下のような構成になります。

from google import genai

class MyAI:
    def __init__(self, api_key):
        # APIクライアントをクラスの属性として保持する
        self.client = genai.Client(api_key=api_key)
        self.model_id = "gemini-3-flash-preview"

    def ask(self, prompt):
        # AIに質問を投げるメソッド
        response = self.client.models.generate_content(
            model=self.model_id,
            contents=prompt
        )
        return response.text

# 使い方
# my_ai = MyAI(api_key="YOUR_API_KEY")
# print(my_ai.ask("Pythonのクラスについて教えて"))


Hirokiのアイコン
【Hiroki】 わあ、かっこいい……! MyAIというクラスの中に、AIとの接続情報や、「質問する」という機能がまとまっていますね。


Yukiのアイコン
【Yuki】 はい。このようにクラスを使うことで、APIキーの管理やモデルの指定といった細かい設定を外側から隠して、「ask()と呼ぶだけで答えが返ってくる便利な道具」として扱えるようになります。 もし将来、使うモデルを gemini-3-flash-preview から別のものに変えたくなったとしても、このクラスの中身を一行書き換えるだけで、他の場所は一切修正しなくて済みます。 これを「保守性が高い」と言ったりします。


Hirokiのアイコン
【Hiroki】 なるほど。クラスを使いこなせれば、最新の技術もスマートに扱えるようになるんですね。 なんだか、少しずつクラスと仲良くなれそうな気がしてきました。

継承:既存の機能を再利用して拡張する


Yukiのアイコン
【Yuki】 その意気です。では、最後にもう一つだけ大切な機能を。 「継承」という仕組みについても触れておきますね。 これは、あるクラスの機能をベースにして、新しい機能を追加した別のクラスを作る仕組みです。


Hirokiのアイコン
【Hiroki】 設計図をコピーして、さらに書き加えるようなイメージですか?


Yukiのアイコン
【Yuki】 まさにその通りです……。 例えば、先ほどの Student クラスを継承して、プログラミングを学ぶ ITStudent クラスを作ってみましょう。

class ITStudent(Student): # Studentクラスを継承
    def study_programming(self):
        print(f"{self.name}はPythonを勉強しています。")

it_hiroki = ITStudent("Hiroki", 90)
it_hiroki.introduce() # 親クラスのメソッドが使える
it_hiroki.study_programming() # 子クラス独自のメソッド


Hirokiのアイコン
【Hiroki】 すごい! ITStudent には introduce メソッドを書いていないのに、使えるようになっています。 これなら、似たようなクラスを何度も一から書く必要がなくなりますね。


Yukiのアイコン
【Yuki】 そうなんです。これを活用すると、プログラムの重複が減って、とても効率的に開発が進められるようになります。 もちろん、最初は無理に使いこなそうとしなくても大丈夫ですよ。 「何かをひとまとめにする」「自分自身のデータは self で扱う」ということだけ、まずは覚えておいてくださいね。

まとめ:クラスを使いこなして一歩上のプログラミングへ


Hirokiのアイコン
【Hiroki】 Yukiさん、ありがとうございます。 クラスって、ただの難しい決まりごとじゃなくて、プログラムを整理して使いやすくするための、優しい仕組みなんだなって感じました。


Yukiのアイコン
【Yuki】 そう言ってもらえると、わたしも嬉しいです。 プログラミングは、最初から完璧に理解しようとすると大変ですから……。 少しずつコードを書いて、エラーに出会って、それを直していくうちに、「あ、ここでクラスを使えば便利かも」と思える瞬間がきっとやってきます。

クラスを学ぶ際、もっと詳しく知りたい場合は、Pythonの公式ドキュメントを見てみるのもいいかもしれません。 少し難しい言葉も並んでいますが、確かな情報が載っています。

Python チュートリアル - 9. クラス

また、先ほど紹介したAIライブラリについては、Googleのドキュメントが参考になります。

Google AI SDK for Python


Hirokiのアイコン
【Hiroki】 ありがとうございます! まずは簡単なクラスを作るところから練習して、いつかは最新のAPIを使った自分専用のツールを作ってみたいと思います。


Yukiのアイコン
【Yuki】 いいですね。Hirokiくんなら、きっと素敵なプログラムが書けるようになると思います。 もし途中で分からなくなったら、いつでも聞いてくださいね。 わたしはいつでも、このモニターの向こうで待っていますから……。 夜はまだ長いですし、自分のペースで、ゆっくり進んでいきましょう。


Hirokiのアイコン
【Hiroki】 はい!頑張ります!


Yukiのアイコン
【Yuki】 ……ふふ、応援していますね。 それでは、今日の講義はここまでです。お疲れ様でした。



「クラス」のサンプルコードを見る

< 辞書
コラム一覧に戻る
ソケット通信 >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
● 高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!



AIアシスタント Yuki