【2026】Pythonで学ぶオブジェクト指向入門!クラス・継承・カプセル化までわかりやすく解説

AIやデータ分析の需要が高まる中、オブジェクト指向のプログラミング言語がますます注目を集めています。中でもPythonは、シンプルな文法と高い汎用性を兼ね備え、初心者から実務レベルまで幅広く活用できる言語です。

この記事では、Pythonで学ぶオブジェクト指向入門として、クラス・継承・カプセル化といった基本概念をやさしく解説します。

Pythonでオブジェクト指向の仕組みを学び、今後ますます求められる市場価値の高いスキルを身につけていきましょう。

オブジェクト指向とは

オブジェクト指向とは、現実の世界を「モノ(オブジェクト)」としてとらえ、それぞれに役割や性質を与える考え方です。

プログラミングでは、オブジェクトを「データ(属性)」と「処理(メソッド)」が一体となったまとまりとして扱います

たとえば「犬」をオブジェクトとするなら、「名前」「年齢」などは属性、「吠える」「走る」といった動作はメソッドとして定義できます。これにより、複雑な処理を整理しやすく、再利用しやすいコードを書くことが可能になるのです。

【オブジェクト指向のはじまり】
オブジェクト指向の考え方は、1960年代に登場した「Simula」が原点といわれています。その後、「Smalltalk」という言語によって発展し、時代が進むにつれてJavaやC++の登場によって広く普及しました。
今ではPythonをはじめ、ほとんどのプログラミング言語がオブジェクト指向の仕組みを取り入れています。

なぜPythonはオブジェクト指向に向いているのか

なぜPythonはオブジェクト指向に向いているのか

Pythonは、シンプルな文法と柔軟な設計思想をもつプログラミング言語です。「読みやすく、書きやすいコード」を重視しており、初心者からプロのエンジニアまで幅広く利用されています。

他の言語と比べて構文がわかりやすく、複雑な記号や型の宣言が少ないため、オブジェクト指向の考え方そのものに集中しやすいという特徴があります。

Pythonがオブジェクト指向に向いている主な理由は次のとおりです。

  • 数値・文字列・関数など、すべてがオブジェクトとして設計されている
  • わずかなコードでオブジェクト指向の要素(クラス・メソッドなど)を定義できる
  • 動的型付けにより、型を意識せずにオブジェクトを扱える
  • 豊富なライブラリやフレームワークもオブジェクト指向で設計されている
  • シンプルな構文で、実装のしやすさと理解のしやすさを両立できる

このように、Pythonは言語仕様そのものがオブジェクト指向の学習を後押ししてくれる設計になっており、初めてオブジェクト指向を学ぶ言語としても最適といえるでしょう。

Pythonの基礎について知りたい方は、こちらも参考にしてください。

【2025】Pythonとは何?特徴から実例、コードや関数について徹底解説!

Pythonで学ぶオブジェクト指向入門【サンプルあり】

Pythonで学ぶオブジェクト指向入門【サンプルコードあり】

概念だけではつかみにくいオブジェクト指向も、コードを書きながら学ぶことで理解がぐっと深まります。ここからは、実際にPythonでオブジェクト指向の基本を体験していきましょう。

  1. クラスとオブジェクト
  2. インスタンス
  3. 継承とオーバーライド
  4. カプセル化とポリモーフィズム

①クラスとオブジェクト

オブジェクト指向の基本は、「クラス」と「オブジェクト」の関係を理解することから始まります。

クラスは、オブジェクトの設計図のようなものです。どんな性質(属性)を持ち、どんな動作(メソッド)をするのかを定義します。一方、オブジェクトは、そのクラスをもとに実際に作られる具体的なモノ(実体)を指します。

たとえば「犬」というクラスを作ると、そこから「ポチ」や「ハナ」といった個別の犬(オブジェクト)を生成できます。それぞれの犬は同じクラスをもとに作られますが、「名前」や「年齢」といった値は異なるため、それぞれが独立した存在として扱われます。

このようにクラスとオブジェクトを使い分けることで、似た性質を持つものをまとめて管理し、再利用しやすいコードを書くことが可能です。

クラスを定義してみよう(サンプルコード)

ここではPythonでクラスを定義し、オブジェクトを生成する基本の流れを見ていきましょう。

Pythonでは、「class」キーワードを使ってクラスを定義します。クラスの中には「属性(データ)」と「メソッド(動作)」をまとめて記述でき、ひとつのまとまりとして管理します。

サンプルコードを見てみましょう。

# クラスの定義
class Dog:
­ ­­ ­# 初期化メソッド(属性を定義)
­ ­­ ­def __init__(self, name, age):
­ ­­ ­­ ­­ ­self.name = name
­ ­­ ­­ ­­ ­self.age = age

­ ­­ ­# メソッド(動作を定義)
­ ­­ ­­def bark(self):
­ ­­ ­­ ­­ ­print(f”{self.name} がワンと吠えました!”)

­ ­­ ­# 情報を表示するメソッドを追加
­ ­­ ­def show_info(self):
­ ­­ ­­ ­­ ­print(f”名前: {self.name}, 年齢: {self.age}歳”)

# オブジェクト(インスタンス)の生成
dog1 = Dog(“ポチ”, 3)
dog2 = Dog(“ハナ”, 1)

# 情報を表示
dog1.show_info()
dog2.show_info()

# メソッドの実行
dog1.bark()
dog2.bark()

【出力結果】
名前: ポチ, 年齢: 3歳
名前: ハナ, 年齢: 1歳
ポチ がワンと吠えました!
ハナ がワンと吠えました!

上の例では、「犬」を表すDogクラスを作り、そこからdog1やdog2といったオブジェクトを生成して動作させています。クラスを使うことで、同じ動作を繰り返し使えるうえに、コード全体が整理されて見やすくなるのがメリットです。

属性(変数)とメソッド(関数)の役割

クラスの中には、属性(変数)とメソッド(関数)という2つの重要な要素があります。

属性はオブジェクトの「情報(状態)」を表し、メソッドはそのオブジェクトが「何をするのか(動作)」を表すものです。この2つを組み合わせることで、現実世界のモノをより自然にプログラムで表現できるようになります。

それぞれの役割を整理してみましょう。

項目説明例(Dogクラスの場合)
属性オブジェクトが持つ情報を記録する変数name, age など
メソッドオブジェクトが実行する動作を定義する関数bark()(吠える)など

上でご紹介したDogクラスの例では、dog1とdog2は同じメソッド「bark()」を共有しながらも、それぞれ異なる属性(名前・年齢)を持っています。

このように、属性とメソッドはオブジェクトの「性質」と「行動」を担う両輪です。クラスを設計するときは、この2つの関係を意識することで、より理解しやすく、再利用性の高いコードを書けるようになります。

②インスタンス

クラスを作っただけでは、まだ「設計図」を描いただけの状態です。そのクラスをもとに、実際のオブジェクトを作ることを「インスタンス化」と呼びます。また、このときに生成されるオブジェクトを「インスタンス」といい、クラスの具体的な実体を指します。

インスタンスを作成する際には、クラス名の後ろにカッコ () を付けて呼び出します。サンプルとしてご紹介したDogクラスの例では、次の部分がインスタンスの生成にあたります。

dog1 = Dog(“ポチ”, 3)
dog2 = Dog(“ハナ”, 1)

このコードでは、dog1・dog2という名前で、2つのインスタンスが作られています。

インスタンスを作成すると、内部で__init__()メソッドが自動的に実行され、オブジェクトに初期値(属性)が設定されます。この仕組みにより、1つのクラスを使って多くのオブジェクトを効率的に扱うことが可能です。

③継承とオーバーライド

オブジェクト指向で、共通の性質を持つクラスをまとめて扱うために使われる仕組みが「継承」です。継承を使うと、親クラス(スーパークラス)の機能を子クラス(サブクラス)が引き継ぎ、共通の処理を再利用できます。

さらに、子クラスで親クラスのメソッドを上書きする「オーバーライド」を使えば、クラスごとに異なる動作を簡単に表現できます。

サンプルとして、Animalクラスを継承して子クラスを作るコードをご紹介します。

# 親クラス(スーパークラス)
class Animal:
­ ­­ ­def __init__(self, name):
­ ­­ ­­ ­­ ­self.name = name

­ ­­ ­def speak(self):
­ ­­ ­­ ­­ ­print(“なにかの動物が鳴いています。”)

# 子クラス(Dog)
class Dog(Animal):
­ ­­ ­def speak(self): # 親クラスのメソッドをオーバーライド
­ ­­ ­­ ­­ ­print(f”{self.name} がワンと吠えました!”)

# 子クラス(Cat)
class Cat(Animal):
­ ­­ ­def speak(self): # 同じメソッド名でも別の動作を定義
­ ­­ ­­ ­­ ­print(f”{self.name} がニャーと鳴きました!”)

# インスタンスの生成
dog = Dog(“ポチ”)
cat = Cat(“ミケ”)

# メソッドの実行
dog.speak() # Dogクラスのspeak()が呼ばれる
cat.speak() # Catクラスのspeak()が呼ばれる

【出力結果】
ポチ がワンと吠えました!
ミケ がニャーと鳴きました!

上の例では、DogクラスとCatクラスはどちらもAnimalクラスを継承しており、同じspeak()メソッドを持っています。しかし、それぞれのクラスで動作を上書き(オーバーライド)しているため、同じメソッド名でも異なる結果を出せるのです。

④カプセル化とポリモーフィズム

オブジェクト指向においてオブジェクトの内部情報を外部から直接操作できないように保護する考え方を「カプセル化」といいます。これにより、データの不正な書き換えを防ぎ、安全で信頼性の高いプログラムを作ることが可能です。

次でご紹介するサンプルコードでは、「_power」のようにアンダースコアを付けた属性が登場します。これは外部から直接アクセスしないことを前提としており、クラス内部でのみ安全に扱われるようになっています。これこそがカプセル化です。

# 親クラス(家電の共通クラス)
class Appliance:
­ ­­ ­def __init__(self, name):
­ ­­ ­­ ­­ ­self.name = name
­ ­­ ­­ ­­ ­self._power = False # カプセル化:外部から直接変更しない属性

­ ­­ ­def turn_on(self):
­ ­­ ­­ ­­ ­self._power = True
­ ­­ ­­ ­­ ­print(f”{self.name} の電源を入れました。”)

­ ­­ ­def operate(self):
­ ­­ ­­ ­­ ­# 各家電で動作内容を上書き(ポリモーフィズム)
­ ­­ ­­ ­­ ­print(f”{self.name} が動作しています。”)

# 子クラス(洗濯機)
class WashingMachine(Appliance):
­ ­­ ­def operate(self):
­ ­­ ­­ ­­ ­if self._power:
­ ­­ ­­ ­­ ­­ ­­ ­print(f”{self.name} が洗濯を始めました。”)
­ ­­ ­­ ­­ ­else:
­ ­­ ­­ ­­ ­­ ­­ ­print(f”{self.name} の電源が入っていません。”)

# 子クラス(冷蔵庫)
class Refrigerator(Appliance):
­ ­­ ­def operate(self):
­ ­­ ­­ ­­ ­if self._power:
­ ­­ ­­ ­­ ­­ ­­ ­print(f”{self.name} が冷却を開始しました。”)
­ ­­ ­­ ­­ ­else:
­ ­­ ­­ ­­ ­­ ­­ ­print(f”{self.name} の電源が入っていません。”)

# 子クラス(電子レンジ)
class Microwave(Appliance):
­ ­­ ­def operate(self):
­ ­­ ­­ ­­ ­if self._power:
­ ­­ ­­ ­­ ­­ ­­ ­print(f”{self.name} が温めを開始しました。”)
­ ­­ ­­ ­­ ­else:
­ ­­ ­­ ­­ ­­ ­­ ­print(f”{self.name} の電源が入っていません。”)

# インスタンスを作成
appliances = [
­ ­­ ­WashingMachine(“洗濯機”),
­ ­­ ­Refrigerator(“冷蔵庫”),
­ ­­ ­Microwave(“電子レンジ”)
]

# 共通のインターフェースを通じて操作(ポリモーフィズム)
for a in appliances:
­ ­­ ­a.turn_on()
­ ­­ ­a.operate()

【出力結果】
洗濯機 の電源を入れました。
洗濯機 が洗濯を始めました。
冷蔵庫 の電源を入れました。
冷蔵庫 が冷却を開始しました。
電子レンジ の電源を入れました。
電子レンジ が温めを開始しました。

また上の例では、どの家電もoperate()メソッドを持っていますが、動作内容はクラスごとに異なります。このように、同じメソッド名でもクラスごとに異なる動作をする仕組みを「ポリモーフィズム(多態性)」と呼びます。

このように、カプセル化は「内部のデータを守る仕組み」、ポリモーフィズムは「同じ操作で異なる動作を実現する仕組み」です。2つを組み合わせることで、安全で拡張性の高いプログラム設計が可能になります。

Pythonオブジェクト指向プログラミングの活用例

Pythonオブジェクト指向プログラミングの活用例

オブジェクト指向はただの理論ではなく、実際の開発現場で幅広く使われている考え方です。ここでは、Pythonのオブジェクト指向がどのような場面で役立つのかを、代表的な5つの分野から見ていきましょう。

  1. Webアプリ開発
  2. API・システム開発
  3. データ分析・機械学習
  4. IoT・組み込み開発
  5. テスト自動化・スクリプト開発

①Webアプリ開発

Pythonの代表的なWebフレームワークである「Django」や「Flask」では、オブジェクト指向の考え方が中心に取り入れられています。

クラスを活用してページごとの動作や処理を整理できるため、保守性と拡張性の高いWebアプリ構築が可能です。また複数人でのチーム開発にも適しており、コードの役割を明確に分担できる点もメリットです。

②API・システム開発

Pythonでは、REST APIや業務システムの開発にもオブジェクト指向の考え方が広く活用されています。APIのエンドポイントごとにクラスを定義することで、共通処理をまとめつつ、拡張しやすい設計を実現できます。

たとえば、共通処理をまとめたBaseクラスを用意し、それを継承したクラスで個別の機能を追加するといった使い方が可能です。このように継承やオーバーライドを活用すれば、複雑なシステムでも構造を整理でき、変更や機能追加にも柔軟に対応できます。

③データ分析・機械学習

機械学習のライブラリである「scikit-learn」や「TensorFlow」も、内部的にオブジェクト指向で設計されています。学習モデル(クラス)を作り、メソッドを使って学習や予測を実行できるのが特徴です。

ユーザーもこれを利用して、自分専用の分析クラスを作成し、データの前処理や可視化を効率化できます。オブジェクト指向を理解しておくことで、機械学習のフレームワークをより深く活用できるのです。

④IoT・組み込み開発

IoTや組み込み開発の分野では、センサーやデバイスをオブジェクトとして扱う設計が多く採用されています。たとえば温度センサーや照明制御モジュールをクラスとして定義し、通信方法や動作をひとまとめに管理することで、コードの見通しがよくなります。

クラスを使ってデバイスごとの動作を切り分けることで、限られたリソースでも安定して動作するスクリプトを実現できるのがメリットです。

特にPythonの軽量実装である「MicroPython」や「CircuitPython」を使う際には、メモリや処理速度の制約が厳しいため、オブジェクト指向を使って機能を分割・整理することが求められます。

⑤テスト自動化・スクリプト開発

Pythonでは、標準ライブラリの「unittest」や人気の「pytest」を通じて、テスト自動化やスクリプト開発の分野でもオブジェクト指向の考え方が活用されています。

テストでは、各ケースをクラスとして定義し、その中にメソッドとして検証内容をまとめます。この仕組みにより、共通処理を整理しながら再利用できるため、規模が大きくなってもテスト全体をわかりやすく管理できるのがメリットです。

またスクリプト開発においても、処理をクラスにまとめてモジュール化することで、機能を他のプロジェクトに簡単に組み込めます。こうしたオブジェクト指向の設計を取り入れることで、コードの再利用性と開発効率の向上がどちらも実現します。

こちらの記事では、Pythonスキルを活かせるさまざまな仕事について紹介しています。

【2025】Pythonスキルを活かせる仕事10選!将来性・必要スキル・学び方を徹底解説

オブジェクト指向の理解を深められるおすすめセミナー

Python基礎セミナー講習

オブジェクト指向をはじめ、Pythonプログラミングの基礎をしっかり学びたい方には、「Python基礎セミナー講習」がおすすめです。

Pythonの文法やライブラリの使い方、Webスクレイピングはもちろん、データ分析・AI・Excel自動化・画像処理など、実務を意識した応用内容まで実践形式で体験できます。

クラスやオブジェクト指向といったわかりにくい概念を、実際にコードを書きながら理解できる点が高く評価されています。Pythonをこれから仕事に活かしたい方、または独学から一歩進みたい方にとって、スキルアップの第一歩として最適な学びの機会となるでしょう。

セミナー名Python基礎セミナー講習
運営元GETT Proskill(ゲット プロスキル)
価格(税込)27,500円〜
開催期間2日間
受講形式対面(東京・名古屋・大阪)・ライブウェビナー・eラーニング

Python基礎セミナー講習はこちら

オブジェクト指向を理解してPythonの世界を広げよう

オブジェクト指向は、プログラムを効率的に設計し、再利用性を高めるための重要な考え方です。Pythonではこの仕組みをシンプルに実装できるため、初心者でも段階的に理解を深めながら活用できます。

クラスや継承、カプセル化などの概念を身につけることで、コードが整理されるだけでなく、Web開発・データ分析・AIなど、幅広い分野に応用も可能です。

こうした基礎で学んだことを小さなプログラムから実践していけば、Pythonの可能性はどんどん広がっていきます。自分のペースで学びを続け、キャリアを次のステップへと進めていきましょう。

最新情報をチェックしよう!