【Python】第5章第10回:特殊メソッド(__str__, __repr__ など)の使い方
本記事では、Pythonにおける「特殊メソッド(ダンダーメソッド)」の中でも特に重要な__str__
と__repr__
について解説します。これらを適切に活用することで、クラスの可読性とデバッグ効率を向上させることができます。
0. 記事の概要
この記事を読むメリット
- 特殊メソッドの基本を理解:クラス設計における柔軟性を向上させます。
- デバッグ効率の向上:
__repr__
を活用して、オブジェクトの状態を簡単に把握できます。 - 出力のカスタマイズ:
__str__
を使って、ユーザー向けの情報をわかりやすく表示します。
この記事で学べること
- 特殊メソッドの役割と仕組み
__str__
と__repr__
の具体的な実装例- 特殊メソッドを使った応用例
1. 特殊メソッドとは?
1.1 定義
特殊メソッド(ダンダーメソッド)は、Pythonのクラスにおいて特別な動作を定義するためのメソッドです。__str__
や__repr__
など、名前がダブルアンダースコア(__
)で囲まれています。
1.2 主な特殊メソッド
__str__
: ユーザー向けの文字列表現を定義__repr__
: デバッグや開発者向けの文字列表現を定義__eq__
: オブジェクト同士の等価性を定義__lt__
: 小なり演算子(<
)の動作を定義__add__
: 加算演算子(+
)の動作を定義
2. __str__ と __repr__ の使い方
2.1 基本的な使い方
# __str__と__repr__の例
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"名前: {self.name}, 年齢: {self.age}"
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
# インスタンス生成
p = Person("太郎", 25)
# 出力例
print(str(p)) # 名前: 太郎, 年齢: 25
print(repr(p)) # Person(name='太郎', age=25)
動作解説
__str__
は、print
関数でオブジェクトを表示する際に呼び出され、ユーザー向けの情報を提供します。__repr__
は、デバッグ時にオブジェクトの詳細情報を確認するために使用されます。
3. __str__ と __repr__ を使った応用
3.1 クラスをより直感的にデバッグ可能に
# 応用例: デバッグ用情報をカスタマイズ
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __repr__(self):
return f"Product(name='{self.name}', price={self.price})"
# リスト内のオブジェクトを表示
products = [Product("ペン", 100), Product("ノート", 200)]
print(products)
# 出力: [Product(name='ペン', price=100), Product(name='ノート', price=200)]
動作解説
- クラス内の
__repr__
メソッドを定義することで、リスト内のオブジェクトも見やすい形で表示されます。
4. 練習問題
以下の課題に挑戦してみましょう。
- 「Book」というクラスを作成し、
title
とauthor
を属性として保持してください。 __str__
を使って、title
とauthor
を見やすく出力できるようにしてください。__repr__
を使って、デバッグ用の詳細情報を出力してください。
5. 練習問題の解答と解説
問1〜3の解答例
# Bookクラスの例
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def __str__(self):
return f"書籍名: {self.title}, 著者: {self.author}"
def __repr__(self):
return f"Book(title='{self.title}', author='{self.author}')"
# インスタンス生成
book = Book("Python入門", "山田太郎")
print(str(book)) # 書籍名: Python入門, 著者: 山田太郎
print(repr(book)) # Book(title='Python入門', author='山田太郎')
6. まとめ
特殊メソッドを適切に活用することで、クラスの可読性やデバッグ効率が大幅に向上します。特に__str__
と__repr__
は、日常的に利用される重要なメソッドです。練習問題を通じて、これらの活用方法を身につけましょう。