Python の dataclass を文字列化したときの取得内容を変更する方法について説明します。
dataclass を文字列で取得
dataclass を文字列化する方法は簡単で「str」を使うだけです。
@dataclasses.dataclass
class Data:
name: str = "name"
number: int = 1
active: bool = True
d = Data()
s = str(x)
出力するだけであればそのまま「print」するのと変わりはありません。
print(d)
print(str(d))
文字列化したときの内容を変更する
文字列化した内容を変更する方法について説明します。
通常の Python の自作クラスと同様で「__str__」メソッドを定義することで設定可能です。
@dataclasses.dataclass
class Data:
name: str = "name"
number: int = 1
active: bool = True
def __str__(self):
return self.name
フィールド の内容を詳細に出力したい場合は、「dataclasses.field」などを使うと効率良く作成できます。(参考サイト参照)
def __str__(self):
fields = [f"{field.name}:{getattr(self, field.name)}" for field in dataclasses.fields(self) if [ここに取得したいフィールドの条件を入れる]
return f'{type(self).__name__}({",".join(fields)})'
__repr__
「__str__」と同じ用に文字列を定義できるメソッドに「__repr__」というものがあります。詳細はここでは説明しませんが、厳密には使い分けがあるので注意してください。
参考
python – How to define `__str__` for `dataclass` that omits default values? – Stack Overflow