Pythonでクラスの可読性を高める__repr__の書き方テクニック
生徒
「Pythonでクラスを作ったんですが、画面に表示すると意味がよく分からない文字が出てきます…」
先生
「クラスの中に__repr__という特別なメソッドを書くと、表示を分かりやすくできます。」
生徒
「特別なメソッドって何ですか? パソコンもほとんど触ったことがないので不安です…」
先生
「大丈夫です。箱に名前シールを貼るような感覚で理解できます。一緒にゆっくり見ていきましょう。」
1. Pythonのクラスと表示の基本
Pythonのオブジェクト指向プログラミングでは、「クラス」という設計図を使ってデータのまとまりを作ります。クラスから作られた実体を「インスタンス」と呼びますが、これは設計図から作った実物の箱のようなものです。
初心者の方がよく戸惑うのが、この箱を画面に表示したときです。printで表示すると、意味不明な英数字が並ぶことがあります。これはPythonが自動的に出している識別情報で、人間にとっては読みづらい表示です。
そこで登場するのが__repr__です。これは「この箱をどう見せるか」を自分で決めるための仕組みです。
2. __repr__とは何か
__repr__は「ダンダー・レプリ」と読みます。前後にアンダースコアが二つ付いているため、特別なメソッドとして扱われます。メソッドとは、クラスの中に書く処理のことです。
この__repr__は、「このクラスの中身を文字としてどう表現するか」をPythonに教える役割を持っています。たとえるなら、段ボール箱の外に「中身は本が三冊入っています」と書いたラベルのようなものです。
ラベルがない箱は開けてみないと中身が分かりませんが、ラベルがあれば一目で分かります。__repr__も同じで、クラスの中身をひと目で理解できるようにします。
3. __repr__を書かない場合の問題点
__repr__を書かずにクラスを表示すると、Pythonは自動的な表示を行います。しかしその表示は、初心者にはほとんど意味が分かりません。
class User:
def __init__(self, name):
self.name = name
user = User("太郎")
print(user)
<__main__.User object at 0x7f8c1a2b3c10>
この表示は「どこにあるUserの箱か」という内部情報であり、「名前が太郎である」という大切な情報は見えません。これでは、デバッグや確認作業がとても大変になります。
4. __repr__の基本的な書き方
__repr__はクラスの中に定義し、必ず文字列を返します。文字列とは、文字が並んだデータのことです。日本語の文章も文字列です。
class User:
def __init__(self, name):
self.name = name
def __repr__(self):
return f"User(name={self.name})"
user = User("太郎")
print(user)
User(name=太郎)
これで、箱の中身が一目で分かる表示になりました。fから始まる文字列は「フォーマット文字列」と呼ばれ、変数の中身を分かりやすく埋め込めます。
5. 可読性を高めるための書き方テクニック
__repr__を書くときのポイントは、「人が読んで分かるか」です。Pythonは正しく動いていても、人が理解できなければ意味がありません。
クラス名を必ず入れる、項目名と値をセットで書く、必要以上に長くしない、といった工夫が大切です。これは、説明書を書く感覚に近いです。
また、数字や文字列が混ざる場合でも、どれが何を表しているのかが分かるように書くと、後から見たときに迷いません。
6. __repr__とデバッグの関係
プログラムが思った通りに動かないとき、原因を探す作業を「デバッグ」と呼びます。難しい言葉ですが、「間違い探し」だと思ってください。
__repr__をきちんと書いておくと、表示を見るだけで中身が確認できるため、間違い探しがとても楽になります。特にオブジェクト指向プログラミングでは、箱の中身を確認する機会が多いため効果が大きいです。
初心者のうちから__repr__を書く習慣をつけると、読みやすいPythonコードにつながります。
7. 初心者が気をつけたいポイント
__repr__は必ず文字列を返す必要があります。数字や他の型を返すとエラーになります。また、難しい処理を書きすぎると、逆に読みづらくなることもあります。
最初は「クラス名と大事な情報を表示する」だけで十分です。箱のラベルを書く気持ちで、シンプルに書くことが、Pythonのクラス設計ではとても重要です。