teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追加

2021/10/02 07:11

投稿

TakaiY
TakaiY

スコア14545

answer CHANGED
@@ -23,4 +23,17 @@
23
23
  この2つは違う値を返します。
24
24
 
25
25
  `__str__`の方は、10 です。 文字列10は表示しても10ですからそのとおりでしょう。
26
- `__repr__`は、 '10' を返します。前後にシングルクオーテーションが付きます。プログラムで文字列を表わるためには、前後を 「"」か「'」で囲わなければなりません。
26
+ `__repr__`は、 '10' を返します。前後にシングルクオーテーションが付きます。プログラムで文字列を表わるためには、前後を 「"」か「'」で囲わなければなりません。
27
+
28
+
29
+ pythonの仕様として、print(x)が呼ばれたとき
30
+ * 'x.__str__' 'x.__repr__' 両方あれば'__str__'が呼ばれる
31
+ * 片方しかなければそちらが呼ばれる
32
+ ようになっています。、
33
+
34
+ > repr() メソッドを定義することで、この関数によりそのクラスのインスタンスが返すものを制御することができます。
35
+
36
+ 何が表示されるかについては、作った人が好きに設定することができます。
37
+ `__repr__`で出力したものが定義どおりにならないものも沢山あります。関数は全てそうなります。
38
+
39
+ IOException の例は、そのインスタンスをprintで出力されたときに、何か表示しなければなりませんが、この実装では、そのオブジェクトが持っているvalue変数に束縛されているオブジェクトの持つ`__repr__`メソッドの返り値を返すことにしたのでしょう。str でなくて repr を選んだ理由はよくわかりませんが。