文法上では、__str__()
はクラスのデフォルト文字表示を定義している。でも、Person
クラスみたいな、いろんな表示が可能なクラスはたくさんあるよね。
なぜ、このような表現をするのでしょうか。
print(var)
を用いてデバッグ中にvar
の内容を確認することが多いから、一般的には__str__()
がなるべく簡潔にクラスのメンバー変数や重要な属性など表示します。下記のような:
python
1class PersonA:
2 def __init__(self, name, age):
3 self.name = name
4 self.age = age
5 def __str__(self):
6 return f'PersonA(name={self.name}, age={self.age})'
7
8a = PersonA('太郎', 10)
9print(a)
10# PersonA(name='太郎', age=10)
でも他の文字表示はどうする?方法は二つ。一つ目は別のメソッドで定義する:
python
1class PersonA:
2 def __init__(self, name, age):
3 self.name = name
4 self.age = age
5 def __str__(self):
6 return f'PersonA(name={self.name}, age={self.age})'
7 def pretty_str(self):
8 return f'{self.name}は{self.age}歳です'
9
10a = PersonA('太郎', 10)
11print(a)
12# PersonA(name='太郎', age=10)
13print(a.pretty_str())
14# 太郎は10歳です
二つ目は問題文のように、別のクラスで定義する:
python
1class PersonAPrettier(PersonA):
2 def __str__():
3 return f'{self.name}は{self.age}歳です'
4
5a = PersonA('太郎', 10)
6print(a)
7# PersonA(name='太郎', age=10)
8ap = PersonAPrettier(a)
9print(ap)
10# 太郎は10歳です
どの方法を使うか人やプロジェクトそれぞれです。自分で色々試してください!
Update: コード例を修正しました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。