Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのオブジェクト指向プログラミング(OOP)の基本を徹底解説

Pythonにおけるオブジェクト指向プログラミング(OOP)とは

Pythonはオブジェクト指向プログラミング(OOP:Object-Oriented Programming)言語です。シンプルな構文でクラスとオブジェクトを簡単に定義・利用でき、再利用性が高く保守しやすいコードを書くことができます。

OOPの理解は、Pythonで実用的なアプリケーションや大規模なシステムを開発するうえで欠かせません。この記事では、Pythonにおける主要なオブジェクト指向の概念を、初心者にもわかるように一つずつ解説します。

Pythonの主要なOOP概念の一覧

  • オブジェクト(Object)
  • クラス(Class)
  • メソッド(Method)
  • 継承(Inheritance)
  • ポリモーフィズム/多態性(Polymorphism)
  • データ抽象化(Data Abstraction)
  • カプセル化(Encapsulation)

オブジェクト(Object)とは

オブジェクトとは、「状態(属性)」と「振る舞い(メソッド)」を持つ実体のことです。マウス、キーボード、椅子、机、ペンのような物理的な存在だけでなく、論理的な存在もオブジェクトとして扱えます。

Pythonでは「すべてはオブジェクト」という設計思想のもと、数値や文字列、関数などほぼすべての要素が属性とメソッドを持っています。たとえば文字列にはupper()メソッドが、リストにはappend()メソッドが用意されています。

クラス(Class)とは

クラスとは、オブジェクトの設計図となるもので、共通の属性とメソッドをまとめた論理的な集合体です。たとえば「学生(Student)」クラスを作る場合、名前・年齢・学籍番号・メールアドレスなどの属性と、自己紹介などのメソッドを定義します。

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

    def introduce(self):
        return f'私は{self.name}です。{self.age}歳です。'

student = Student('田中', 20)
print(student.introduce())  # 私は田中です。20歳です。

メソッド(Method)とは

メソッドとは、特定のオブジェクトに紐づけられた関数のことです。Pythonでは、メソッドがクラスのインスタンスだけに限定されることはありません。文字列やリスト、辞書など、あらゆるオブジェクト型がそれぞれ固有のメソッドを持つことができます。

継承(Inheritance)とは

継承とは、親クラス(基底クラス・スーパークラス)が持つすべての属性や振る舞いを、子クラス(派生クラス・サブクラス)が引き継ぐ仕組みです。既存のクラスにほとんど、あるいはまったく変更を加えることなく新しいクラスを定義できるため、コードの再利用性が大幅に向上します。

class Animal:  # 親クラス(基底クラス)
    def __init__(self, name):
        self.name = name

class Dog(Animal):  # 子クラス(派生クラス)
    def talk(self):
        return 'ワンワン'

dog = Dog('ポチ')
print(dog.name)  # ポチ(親クラスの属性を引き継いでいる)

ポリモーフィズム(Polymorphism)とは

ポリモーフィズム(多態性)とは、同じ操作でも対象によって異なる動作を実現できる性質のことです。たとえば「動物」クラスに「鳴く(talk)」という振る舞いがあるとしましょう。しかし、犬なら「ワンワン」、猫なら「ニャー」と、実際の鳴き方は動物ごとに異なります。

このとき、抽象的な「動物」そのものが鳴くのではなく、具体的な各動物が「鳴く」というアクションをそれぞれ独自の方法で実装しています。同じインターフェースを使いながら異なる挙動を実現できるのがポリモーフィズムの強みです。

class Dog:
    def talk(self):
        return 'ワンワン'

class Cat:
    def talk(self):
        return 'ニャー'

for animal in [Dog(), Cat()]:
    print(animal.talk())  # 同じtalk()呼び出しでも結果が異なる

カプセル化(Encapsulation)とは

カプセル化とは、メソッドや変数へのアクセスを制限し、コードとデータをひとつの単位としてまとめる仕組みです。外部から内部の状態を直接変更できないようにすることで、意図しない改変によるバグを防ぎます。

Pythonでは、アンダースコアを使った命名の慣習によってアクセス制御を行います。_variable(シングルアンダースコア)は「外部から直接触らないでほしい」ことを示す目印であり、__variable(ダブルアンダースコア)は名前修飾(ネームマングリング)によってクラス外からのアクセスをより強く制限します。

データ抽象化(Data Abstraction)とは

データ抽象化とは、内部の複雑な処理や詳細を隠し、必要な機能(インターフェース)だけを外部に公開する考え方です。抽象化とカプセル化は密接に関係しており、データ抽象化はカプセル化を通じて実現されます。

何かを「抽象化する」とは、そのものに名前を与えることでもあります。関数やプログラム全体が何をするのかという本質的なアイデアを名前が表すようにすることで、利用者は内部実装を意識せずに機能を利用できるようになります。

まとめ

PythonのOOPは、オブジェクトクラスメソッド継承ポリモーフィズムカプセル化データ抽象化という7つの柱で成り立っています。これらの概念を理解すれば、コードの再利用性・可読性・保守性が大きく向上し、より洗練されたPythonプログラムを書けるようになります。まずは小さなクラスを自分で定義し、継承やポリモーフィズムを実際に試してみることから始めてみましょう。

  1. Pythonのファイルオブジェクトの主な属性とメソッドを徹底解説

    Pythonでは、open()関数を使ってファイルを開くと「ファイルオブジェクト」が返されます。このオブジェクトは、ファイルの読み書きや状態管理を行うための多数の属性とメソッドを持っています。本記事では、特によく使われるメソッドと属性について、具体例を交えながらわかりやすく解説します。 よく使われるファイルオブジェクトのメソッド close() ― 開いたファイルを閉じます。ファイル操作が終わったら必ず呼び出し、リソースを解放しましょう。 next() ― ファイルをイテレータとして扱う際に呼び出されるメソッドです。for line in f: のようにforループでファイルを回すとき、この

  2. Pythonの予約キーワード(予約語)とは?一覧と確認方法をわかりやすく解説

    予約語(キーワード)とは予約語(reserved words)は「キーワード」とも呼ばれ、言語仕様の中であらかじめ意味と構文が定義された特別な単語のことです。条件分岐やループ処理といったプログラミング命令を記述する際には、必ずこれらのキーワードを使用します。重要なポイントとして、予約語は変数名や関数名など、他のプログラミング要素の識別子(identifier)として使用できません。例えば「def」や「import」という名前の変数を作成しようとすると、SyntaxError(構文エラー)が発生します。Python 3の予約キーワード一覧以下は、Python 3で定義されている予約キーワードの一