クラスの特殊メソッド .format()を使う時 __format__

Pythonのクラスにおいて、文字列のフォーマット処理をカスタマイズするための特殊メソッドとして、__format__ メソッドを定義できます。このメソッドを実装することで、str.format() メソッドや f-strings などでオブジェクトを文字列に変換する際のフォーマットをカスタマイズできます。

__format__ メソッドは、2つの引数を取ります。最初の引数 self は、メソッドを呼び出すオブジェクト自体を参照し、2番目の引数 format_spec はフォーマット指定子を表します。format_spec は、フォーマットのためのカスタムルールを提供するために使用されます。

以下は、__format__ メソッドを使ってカスタムクラス内でフォーマット処理をカスタマイズする例です:

python
class MyDate: def __init__(self, year, month, day): self.year = year self.month = month self.day = day def __format__(self, format_spec): if format_spec == 'ymd': return f'{self.year}-{self.month}-{self.day}' elif format_spec == 'mdy': return f'{self.month}/{self.day}/{self.year}' else: return str(self) # デフォルトのフォーマット def __str__(self): return f'{self.year}-{self.month}-{self.day}' # インスタンスを作成 date = MyDate(2023, 10, 12) # フォーマットを指定して文字列に変換 formatted_date_ymd = format(date, 'ymd') formatted_date_mdy = format(date, 'mdy') print(formatted_date_ymd) # 結果: "2023-10-12" print(formatted_date_mdy) # 結果: "10/12/2023"

この例では、MyDate クラス内に __format__ メソッドが定義されています。このメソッドはフォーマット指定子 format_spec に応じて、異なるフォーマットの文字列を返すようにカスタマイズされています。format() 関数を使ってフォーマット処理を行うことができます。

__format__ メソッドを実装することで、クラスのオブジェクトをカスタムフォーマットで文字列に変換でき、フォーマット処理を柔軟に制御することができます。