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

回答編集履歴

5

順序入替え

2020/01/06 01:41

投稿

shiracamus
shiracamus

スコア5413

answer CHANGED
@@ -2,18 +2,7 @@
2
2
  さらに `x.__add__` メソッドは自分自身を第一引数にして、`ADD.__add__(x, y)` という形に変換してクラスに定義されている関数を呼び出します。
3
3
  つまり、関数 `ADD.__add__` の引数 self には `x` が、引数 other には `y` が引き渡されることになり、`return x.value + y.value + 1` が実行され、`return 10 + 20 + 1` となり、結果 `31` という値が返されます。
4
4
 
5
- `1 + 2` も、内部的には `1 .__add__(2)` から `int.__add__(1, 2)` が呼び出されています。(1直後のドットは浮動小数点と解釈されてしまうため空白を入れてください)
6
-
7
5
  ```python
8
- >>> 1 + 2
9
- 3
10
- >>> 1 .__add__(2)
11
- 3
12
- >>> int.__add__(1, 2)
13
- 3
14
- ```
15
-
16
- ```python
17
6
  >>> class ADD:
18
7
  ... def __init__(self, value):
19
8
  ... self.value = value
@@ -30,4 +19,15 @@
30
19
  31
31
20
  >>> x.value + y.value + 1
32
21
  31
22
+ ```
23
+
24
+ `1 + 2` も、内部的には `1 .__add__(2)` から `int.__add__(1, 2)` が呼び出されています。(整数直後のドットは浮動小数点と解釈されてしまうため空白を入れています)
25
+
26
+ ```python
27
+ >>> 1 + 2
28
+ 3
29
+ >>> 1 .__add__(2)
30
+ 3
31
+ >>> int.__add__(1, 2)
32
+ 3
33
33
  ```

4

実行例追加

2020/01/06 01:41

投稿

shiracamus
shiracamus

スコア5413

answer CHANGED
@@ -11,4 +11,23 @@
11
11
  3
12
12
  >>> int.__add__(1, 2)
13
13
  3
14
+ ```
15
+
16
+ ```python
17
+ >>> class ADD:
18
+ ... def __init__(self, value):
19
+ ... self.value = value
20
+ ... def __add__(self, other):
21
+ ... return self.value + other.value + 1
22
+ ...
23
+ >>> x = ADD(10)
24
+ >>> y = ADD(20)
25
+ >>> x + y
26
+ 31
27
+ >>> x.__add__(y)
28
+ 31
29
+ >>> ADD.__add__(x, y)
30
+ 31
31
+ >>> x.value + y.value + 1
32
+ 31
14
33
  ```

3

文言修正

2020/01/06 01:21

投稿

shiracamus
shiracamus

スコア5413

answer CHANGED
@@ -1,6 +1,6 @@
1
- Pythonインタープリタは、`x + y` を `x.__add__(y)` と解釈して、変数 `x` に格納されているオブジェクトの `__add__` メソッドを、変数 `y` に格納されているオブジェクトを引数にして呼び出します。
1
+ Pythonインタープリタは、`x + y` を `x.__add__(y)` と解釈して、変数 `x` に代入されているオブジェクトの `__add__` メソッドを、変数 `y` に代入されているオブジェクトを引数にして呼び出します。
2
2
  さらに `x.__add__` メソッドは自分自身を第一引数にして、`ADD.__add__(x, y)` という形に変換してクラスに定義されている関数を呼び出します。
3
- つまり、引数 self には `x` が、引数 other には `y` が渡ることになり、`return x.value + y.value + 1` が実行され、`return 10 + 20 + 1` となり、結果 `31` という値が返されます。
3
+ つまり、関数 `ADD.__add__` の引数 self には `x` が、引数 other には `y` が引きされることになり、`return x.value + y.value + 1` が実行され、`return 10 + 20 + 1` となり、結果 `31` という値が返されます。
4
4
 
5
5
  `1 + 2` も、内部的には `1 .__add__(2)` から `int.__add__(1, 2)` が呼び出されています。(1直後のドットは浮動小数点と解釈されてしまうため空白を入れてください)
6
6
 

2

実行例追加

2020/01/06 00:53

投稿

shiracamus
shiracamus

スコア5413

answer CHANGED
@@ -2,4 +2,13 @@
2
2
  さらに `x.__add__` メソッドは自分自身を第一引数にして、`ADD.__add__(x, y)` という形に変換してクラスに定義されている関数を呼び出します。
3
3
  つまり、引数 self には `x` が、引数 other には `y` が渡ることになり、`return x.value + y.value + 1` が実行され、`return 10 + 20 + 1` となり、結果 `31` という値が返されます。
4
4
 
5
- `1 + 2` も、内部的には `1 .__add__(2)` から `int.__add__(1, 2)` が呼び出されています。(1直後のドットは浮動小数点と解釈されてしまうため空白を入れてください)
5
+ `1 + 2` も、内部的には `1 .__add__(2)` から `int.__add__(1, 2)` が呼び出されています。(1直後のドットは浮動小数点と解釈されてしまうため空白を入れてください)
6
+
7
+ ```python
8
+ >>> 1 + 2
9
+ 3
10
+ >>> 1 .__add__(2)
11
+ 3
12
+ >>> int.__add__(1, 2)
13
+ 3
14
+ ```

1

文言修正

2020/01/05 23:19

投稿

shiracamus
shiracamus

スコア5413

answer CHANGED
@@ -1,5 +1,5 @@
1
- Pythonインタープリタは、`x + y` を `x.__add__(y)` と解釈して、変数 x に格納されているオブジェクトの `__add__` メソッドを呼び出します。
1
+ Pythonインタープリタは、`x + y` を `x.__add__(y)` と解釈して、変数 `x` に格納されているオブジェクトの `__add__` メソッドを、変数 `y` に格納されているオブジェクトを引数にして呼び出します。
2
- さらに、それは `ADD.__add__(x, y)` とクラスに定義され関数を呼び出します。
2
+ さらに `x.__add__` メソッドは自分自身を第一引数にして、`ADD.__add__(x, y)` という形に変換してクラスに定義されている関数を呼び出します。
3
- つまり、引数 self には x が、引数 other には yが渡ることになり、`return x.value + y.value + 1` が実行され、`return 10 + 20 + 1` となり、結果 `31` という値が返されます。
3
+ つまり、引数 self には `x` が、引数 other には `y` が渡ることになり、`return x.value + y.value + 1` が実行され、`return 10 + 20 + 1` となり、結果 `31` という値が返されます。
4
4
 
5
5
  `1 + 2` も、内部的には `1 .__add__(2)` から `int.__add__(1, 2)` が呼び出されています。(1直後のドットは浮動小数点と解釈されてしまうため空白を入れてください)