Pythonの多態性とは?意味をわかりやすく簡単に解説

Pythonの多態性とは?意味をわかりやすく簡単に解説

公開: 更新:


多態性(ポリモーフィズム)とは

多態性は同じインターフェースを持つ異なるクラスのオブジェクトを、統一的に扱える概念です。これによりコードの再利用性や柔軟性が向上し、プログラムの保守性が高まります。英名では「Polymorphism(ポリモーフィズム)」と呼ばれています。

Pythonではダックタイピングという仕組みを通じて多態性を実現しています。これはオブジェクトのよりもそのオブジェクトが持つメソッドや、属性に注目するアプローチです。

多態性を活用することで同じインターフェースを持つ、異なるクラスのオブジェクトを同じように扱えるためコードの柔軟性が大幅に向上します。これにより新しい機能の追加や既存コードの変更が容易になり、プログラムの拡張性が高まるのです。

「Python」を学べるコードキャンプのサービス

Pythonにおける多態性の実装方法

Pythonにおける多態性の実装方法について、以下3つを簡単に解説します。

  • ダックタイピングを活用した多態性
  • 抽象基底クラスによる多態性の実現
  • メソッドオーバーライドを用いた多態性

ダックタイピングを活用した多態性

Pythonではダックタイピングを活用することで、柔軟な多態性を実現できます。これはオブジェクトの型ではなく、そのオブジェクトが持つメソッドや属性に注目するアプローチです。ダックタイピングにより異なるクラスのオブジェクトでも、同じインターフェースを持つ場合は同じように扱えるのが魅力です。

class Dog:
    def speak(self):
        return "Woof!"

class Cat:
    def speak(self):
        return "Meow!"

def animal_sound(animal):
    return animal.speak()

dog = Dog()
cat = Cat()
print(animal_sound(dog))  # 出力: Woof!
print(animal_sound(cat))  # 出力: Meow!

このサンプルコードではDogクラスとCatクラスの両方に、speakメソッドが定義されています。animal_sound関数は渡されたオブジェクトの型を気にせず、単にspeakメソッドを呼び出しています。これにより異なるクラスのオブジェクトを同じように扱うことが可能です。

ダックタイピングを活用することでコードの柔軟性が向上し、新しいクラスの追加が容易になります。たとえばspeakメソッドを持つ新しい動物クラスを追加しても、animal_sound関数を変更する必要がありません。これによりプログラムの拡張性が高まるのです。

おすすめのPython研修一覧

Python研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Python研修の一覧を見る

おすすめのDX研修一覧

DX研修を提供しているおすすめの企業・法人を一覧で掲載しております。

DX研修の一覧を見る

おすすめのJava研修一覧

Java研修を提供しているおすすめの企業・法人を一覧で掲載しております。

Java研修の一覧を見る

おすすめのJavaScript研修一覧

JavaScript研修を提供しているおすすめの企業・法人を一覧で掲載しております。

JavaScript研修の一覧を見る

抽象基底クラスによる多態性の実現

Pythonではabcモジュールを使用して抽象基底クラスを定義し、多態性を実現できます。抽象基底クラスを用いることで共通のインターフェースを強制し、サブクラスに特定のメソッドの実装を要求できます。

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

def animal_sound(animal):
    return animal.speak()

dog = Dog()
cat = Cat()
print(animal_sound(dog))  # 出力: Woof!
print(animal_sound(cat))  # 出力: Meow!

このコードではAnimalクラスをABCクラスを継承し、抽象基底クラスとして定義している例です。@abstractmethodデコレータを使用してspeakメソッドを抽象メソッドとして宣言することで、サブクラスにこのメソッドの実装を強制しています。

抽象基底クラスを使用することでインターフェースの一貫性が保証され、プログラムの信頼性が向上します。また、新しいAnimalサブクラスを追加する際もspeakメソッドの実装が強制されるため、予期せぬエラーを防止することが可能です。

メソッドオーバーライドを用いた多態性

Pythonではメソッドオーバーライドを使用し、多態性を実現できます。これはサブクラスで親クラスのメソッドを再定義することで、同じメソッド名でも異なる振る舞いを実装する技術です。メソッドオーバーライドにより柔軟性の高いコードを書くことができます。

class Shape:
    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius ** 2

def calculate_area(shape):
    return shape.area()

rect = Rectangle(5, 4)
circle = Circle(3)
print(calculate_area(rect))    # 出力: 20
print(calculate_area(circle))  # 出力: 28.26

上記はShapeクラスにareaメソッドのプレースホルダーがあるこのサンプルコードです。RectangleクラスとCircleクラスはそれぞれShapeクラスを継承し、areaメソッドをオーバーライドしています。calculate_area関数は渡されたオブジェクトの型に関係なく、単にareaメソッドを呼び出します。

メソッドオーバーライドを用いることで共通のインターフェースを保ちつつ、各サブクラスに特有の実装を提供できます。これによりコードの再利用性が高まり、新しい形状を追加する際も既存のコードを変更せずに済むのが特徴です。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する