【Python】第5章第6回:ポリモーフィズム(多態性)の基礎
本記事では、Pythonのオブジェクト指向プログラミングにおける重要な概念「ポリモーフィズム」について詳しく解説します。これを理解することで、コードの柔軟性と拡張性を高めることができます。
0. 記事の概要
この記事を読むメリット
- ポリモーフィズムの基本を理解:異なるクラス間での一貫性のある操作を学べます。
- コード設計力の向上:柔軟なプログラムを構築する方法を習得できます。
- 実践力の習得:ポリモーフィズムを活用した効率的なコードを書く力を身につけます。
この記事で学べること
- ポリモーフィズムの基本概念と仕組み
- Pythonにおけるポリモーフィズムの実装例
- 実践的な活用方法と注意点
1. ポリモーフィズムとは?
1.1 定義
ポリモーフィズム(多態性)とは、異なるクラスのオブジェクトが、同じインターフェースを通じて操作できる仕組みを指します。
1.2 ポリモーフィズムのメリット
- コードの一貫性を保つ
- 拡張性が高く、柔軟な設計が可能
- 複数のオブジェクトを一つの操作で扱える
2. ポリモーフィズムの活用例
2.1 基本的な例
# ポリモーフィズムの基本例
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "ワンワン"
class Cat(Animal):
def speak(self):
return "ニャー"
animals = [Dog(), Cat()]
for animal in animals:
print(animal.speak())
# 出力:
# ワンワン
# ニャー
動作解説
Animal
クラスを基底クラスとして、Dog
とCat
がそれぞれ独自のspeak
メソッドを定義しています。- リスト
animals
内のオブジェクトは、Animal
クラスを介して一貫性のある操作が可能です。
2.2 実践例:形状クラスの利用
# Shapeクラスの実装例
class Shape:
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
shapes = [Circle(5), Rectangle(4, 6)]
for shape in shapes:
print(shape.area())
# 出力:
# 78.5
# 24
動作解説
Shape
クラスを基底クラスとして、Circle
とRectangle
がそれぞれarea
メソッドを実装しています。- リスト
shapes
内のオブジェクトに対して、同じarea
メソッドを呼び出して計算を行います。
3. ポリモーフィズムの注意点
- 基底クラスのメソッドをオーバーライドする際、意図した動作が行われるように注意する
- 多態性を意識した設計を行い、共通のインターフェースを定義する
4. 練習問題
以下の課題に挑戦してみましょう。
- 「Vehicle」という基底クラスを作成し、
move
メソッドを定義してください。 Car
とBike
というクラスを作成し、move
メソッドをオーバーライドしてください。
5. 練習問題の解答と解説
問1の解答例
# Vehicleクラス
class Vehicle:
def move(self):
pass
問2の解答例
# CarとBikeクラス
class Car(Vehicle):
def move(self):
return "車が走ります"
class Bike(Vehicle):
def move(self):
return "バイクが走ります"
vehicles = [Car(), Bike()]
for vehicle in vehicles:
print(vehicle.move())
# 出力:
# 車が走ります
# バイクが走ります
6. まとめ
ポリモーフィズムは、異なるオブジェクトを共通のインターフェースで操作する強力な手法です。練習問題を通じて、ポリモーフィズムを実践的に学びましょう。