Pythonのrepr()関数とは?オブジェクト指向プログラミングにおける役割を解説
Python公式ドキュメントによると、__repr__()はオブジェクトの「公式(official)」な文字列表現を計算するための特殊メソッドです。組み込み関数repr()は、内部でこの__repr__()を呼び出してオブジェクトを表示します。戻り値となる文字列は、人間が読める形式であるだけでなく、多くの場合その文字列から元のオブジェクトを再構築できる情報を含んでいます。
また、__repr__()は主に開発者向けのデバッグや開発作業に役立つのに対し、__str__()はエンドユーザー向けの読みやすい表示に適しているという違いがあります。用途に応じて両者を使い分けることが、Pythonらしいオブジェクト設計のポイントです。
__repr__()の基本的な実装例
次のコードは、独自クラスで__repr__()を実装する方法と、その動作を示しています。
class Point:
def __init__(self, x, y):
self.x, self.y = x, y
def __repr__(self):
return 'Point(x=%s, y=%s)' % (self.x, self.y)
p = Point(3, 4)
print(p)
出力結果
Point(x=3, y=4)
print()はオブジェクトの__repr__()を呼び出すため、定義した形式でインスタンスの内容が表示されます。これにより、デバッグ時にオブジェクトの中身をひと目で把握できます。
datetimeオブジェクトでのrepr()の使用例
続いて、標準ライブラリのdatetimeオブジェクトを使って、repr()関数の実際の挙動を確認してみましょう。
>>> import datetime >>> today = datetime.datetime.now()
組み込み関数repr()を使って変数todayを表示すると、次のような結果になります。
>>> repr(today) 'datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)'
戻り値は確かに文字列ですが、これはdatetimeオブジェクトの「公式」な文字列表現です。重要なのは、この文字列から元のオブジェクトを再構築できるという点です。
>>> eval('datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)')
datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)
組み込み関数eval()は文字列をPythonの式として評価し、datetimeオブジェクトを復元します。このようにrepr()が返す文字列は単なる表示用テキストではなく、オブジェクトの状態を正確に再現できる「再構築可能な表現」であることが、__repr__()設計の本質と言えます。
-
Pythonのraw_input()関数とは?役割とinput()との違いをわかりやすく解説
raw_input()関数の基本的な動作Python 2におけるraw_input()関数は、ユーザーに対してプロンプト(入力を促すメッセージ)を表示し、キーボードから入力されたデータを受け取り、その内容を文字列(str型)として返す関数です。引数は省略可能で、raw_input([arg])のように文字列を渡すと、それがそのままプロンプトとして画面に表示されます。以下は典型的な使用例です。name = raw_input(What is your name? ) print Hello, %s. % nameこのコードを実行すると、まず「What is your name? 」というプロンプ
-
Pythonのreload()関数とは?モジュールを再読み込みする方法を解説
Pythonのreload()関数とはPythonのreload(moduleName)関数は、すでに読み込まれているモジュールを再読み込み(リロード)するための機能です。モジュールを読み込む際は、通常どおり import moduleName の構文でインポートしておく必要があります。この関数は、対話型セッションでの利用を想定して設計されています。たとえば、モジュールのソースファイルを編集した後、Pythonインタプリタを終了して再起動することなく、変更内容をすぐにテストしたい場合に便利です。reload()の基本的な使い方以下は、モジュールを編集した後に再読み込みする基本的な例です。>