回答編集履歴
4
d
answer
CHANGED
@@ -33,6 +33,14 @@
|
|
33
33
|
def __add__(self, other):
|
34
34
|
return Hoge(self.x + other)
|
35
35
|
|
36
|
+
def __imul__(self, other):
|
37
|
+
self.x *= other
|
38
|
+
return self
|
39
|
+
|
40
|
+
def __iadd__(self, other):
|
41
|
+
self.x += other
|
42
|
+
return self
|
43
|
+
|
36
44
|
def __str__(self):
|
37
45
|
return str(self.x)
|
38
46
|
|
@@ -40,6 +48,10 @@
|
|
40
48
|
x = Hoge(9)
|
41
49
|
y = x * 2
|
42
50
|
z = x * 2 + 2
|
51
|
+
print(y)
|
52
|
+
print(z)
|
53
|
+
x += 2
|
43
|
-
print(
|
54
|
+
print(x) # 11
|
55
|
+
x *= 2
|
44
|
-
print(
|
56
|
+
print(x) # 22
|
45
57
|
```
|
3
d
answer
CHANGED
@@ -14,4 +14,32 @@
|
|
14
14
|
|
15
15
|
times2_plus2(Hoge(9))
|
16
16
|
# 20
|
17
|
+
```
|
18
|
+
|
19
|
+
## 補足
|
20
|
+
|
21
|
+
より汎用的なクラスを設計しようと思った場合、2倍にする関数だけでなく、3倍、4倍と任意の値を乗算したい場合も出てくるかもしれないので、演算子オーバロードを使うといいかもしれません。
|
22
|
+
|
23
|
+
[Python Tips:自作クラスの演算子のふるまいを定義したい - Life with Python](https://www.lifewithpython.com/2014/06/python-redefine-operators.html)
|
24
|
+
|
25
|
+
```python
|
26
|
+
class Hoge:
|
27
|
+
def __init__(self, x):
|
28
|
+
self.x = x
|
29
|
+
|
30
|
+
def __mul__(self, other):
|
31
|
+
return Hoge(self.x * other)
|
32
|
+
|
33
|
+
def __add__(self, other):
|
34
|
+
return Hoge(self.x + other)
|
35
|
+
|
36
|
+
def __str__(self):
|
37
|
+
return str(self.x)
|
38
|
+
|
39
|
+
|
40
|
+
x = Hoge(9)
|
41
|
+
y = x * 2
|
42
|
+
z = x * 2 + 2
|
43
|
+
print(y) # 18
|
44
|
+
print(z) # 20
|
17
45
|
```
|
2
d
answer
CHANGED
@@ -13,5 +13,5 @@
|
|
13
13
|
return self.x * 2
|
14
14
|
|
15
15
|
times2_plus2(Hoge(9))
|
16
|
-
#
|
16
|
+
# 20
|
17
17
|
```
|
1
s
answer
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
times2_plus2()
|
1
|
+
自身のインスタンス変数と関係ない times2_plus2() がクラス Hoge のメソッドとして定義されているのは変な気がします。
|
2
|
+
フリー関数として定義してはどうでしょうか
|
2
3
|
|
3
4
|
```python
|
5
|
+
def times2_plus2(y):
|
6
|
+
return y.times2() + 2
|
7
|
+
|
4
8
|
class Hoge:
|
5
9
|
def __init__(self, x):
|
6
10
|
self.x = x
|
@@ -8,10 +12,6 @@
|
|
8
12
|
def times2(self):
|
9
13
|
return self.x * 2
|
10
14
|
|
11
|
-
def times2_plus2(self, y):
|
12
|
-
return y.times2() + 2
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
times2_plus2(Hoge(9))
|
16
16
|
# 9 * 2 + 2 = 18
|
17
17
|
```
|