回答編集履歴
14
test
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
super().__init__(n,j)
|
51
51
|
- self.__jikyu = j # 削除
|
52
52
|
- self.__zangyoTeate = z # 下記に修正
|
53
|
-
+ self.__zangyo_jikyu
|
53
|
+
+ self.__zangyo_jikyu = z
|
54
54
|
self.__zangyoJikan = -1
|
55
55
|
|
56
56
|
def kyuyoKeisan(self,k,l):
|
@@ -58,7 +58,7 @@
|
|
58
58
|
self.__zangyoJikan = l
|
59
59
|
- self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記2行に修正
|
60
60
|
- self.__zangyoTeate = self.__zangyoTeate * self.__zangyoJikan # 下記2行に修正
|
61
|
-
+ self.__zangyoTeate = self.__zangyo_jikyu
|
61
|
+
+ self.__zangyoTeate = self.__zangyo_jikyu * self.__zangyoJikan
|
62
62
|
+ self.__kyuyo = super().outputKyuyo() + self.__zangyoTeate
|
63
63
|
|
64
64
|
def outputZangyoJikan(self):
|
13
test
CHANGED
@@ -28,14 +28,14 @@
|
|
28
28
|
---
|
29
29
|
|
30
30
|
#### 説明
|
31
|
-
修正前のコードで勤務時間と正規給与が-1となるのは、オーバーライドした kyuyoKeisan 関数で、勤務時間を正しく設定していないからです。
|
31
|
+
修正前のコードで勤務時間と正規給与が-1となるのは、オーバーライドした kyuyoKeisan 関数で、勤務時間を正しく設定しておらず給与も計算されていないからです。
|
32
|
-
したがって、継承元の kyuyoKeisan 関数を呼び出して、勤務時間を設定しています。
|
32
|
+
したがって、継承元の kyuyoKeisan 関数を呼び出して、勤務時間を設定し給与を計算しています。
|
33
33
|
|
34
34
|
また、勤務時間を出力する時、
|
35
35
|
```
|
36
36
|
print('総支給額:',x.outputKyuyo(),'円')
|
37
37
|
```
|
38
|
-
としていますが、この outputKyuyo 関数は継承元クラスの関数を呼び出しており、継承元の self.__kyuuyo は残業込み
|
38
|
+
としていますが、この outputKyuyo 関数は継承元クラスの関数を呼び出しており、継承元の self.__kyuuyo は残業込みではありません。
|
39
39
|
したがって、継承先の kyuyoKeisan 内で outputKyuyo 関数をオーバーライドし、継承先で残業込みで計算された__kyuuyo を表示させる必要があります。
|
40
40
|
|
41
41
|
---
|
12
test
CHANGED
@@ -59,7 +59,7 @@
|
|
59
59
|
- self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記2行に修正
|
60
60
|
- self.__zangyoTeate = self.__zangyoTeate * self.__zangyoJikan # 下記2行に修正
|
61
61
|
+ self.__zangyoTeate = self.__zangyo_jikyuu * self.__zangyoJikan
|
62
|
-
+ self.__kyuyo = se
|
62
|
+
+ self.__kyuyo = super().outputKyuyo() + self.__zangyoTeate
|
63
63
|
|
64
64
|
def outputZangyoJikan(self):
|
65
65
|
return self.__zangyoJikan
|
11
修正
test
CHANGED
@@ -12,8 +12,7 @@
|
|
12
12
|
def kyuyoKeisan(self,k,l):
|
13
13
|
+ super().kyuyoKeisan(k) # 追加
|
14
14
|
self.__zangyoJikan = l
|
15
|
-
|
15
|
+
self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l)
|
16
|
-
+ self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l)
|
17
16
|
self.__zangyoTeate = self.__zangyoTeate * self.__zangyoJikan
|
18
17
|
|
19
18
|
def outputZangyoJikan(self):
|
@@ -22,6 +21,8 @@
|
|
22
21
|
def outputZangyoTeate(self):
|
23
22
|
return self.__zangyoTeate
|
24
23
|
|
24
|
+
+ def outputKyuyo(self): # 追加
|
25
|
+
+ return self.__kyuyo # 追加
|
25
26
|
```
|
26
27
|
|
27
28
|
---
|
@@ -30,19 +31,12 @@
|
|
30
31
|
修正前のコードで勤務時間と正規給与が-1となるのは、オーバーライドした kyuyoKeisan 関数で、勤務時間を正しく設定していないからです。
|
31
32
|
したがって、継承元の kyuyoKeisan 関数を呼び出して、勤務時間を設定しています。
|
32
33
|
|
33
|
-
また、修正前コードでは、継承先でオーバーライドした kyuyoKeisan関数 で __kyuuyo を残業込みで計算していますが、継承元の __kyuuyo 属性は更新されていません。
|
34
|
-
|
35
|
-
勤務時間を出力する時、
|
34
|
+
また、勤務時間を出力する時、
|
36
35
|
```
|
37
|
-
print('
|
36
|
+
print('総支給額:',x.outputKyuyo(),'円')
|
38
37
|
```
|
39
|
-
としていますが、この outputKyuyo 関数
|
38
|
+
としていますが、この outputKyuyo 関数は継承元クラスの関数を呼び出しており、継承元の self.__kyuuyo は残業込みの金額になっていません。
|
40
|
-
したがって。継承先の kyuyoKeisan 内で
|
41
|
-
```
|
42
|
-
|
39
|
+
したがって、継承先の kyuyoKeisan 内で outputKyuyo 関数をオーバーライドし、継承先で残業込みで計算された__kyuuyo を表示させる必要があります。
|
43
|
-
```
|
44
|
-
として、__kyuuyo を残業込みの時間に更新してあげる必要があります。
|
45
|
-
(本来想定しない方法かもしれませんが、「7. K10_main.py とK10_class.py はそのまま用いる」という条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
|
46
40
|
|
47
41
|
---
|
48
42
|
もうすこし修正するなら下記のようになるでしょうか。
|
@@ -65,11 +59,14 @@
|
|
65
59
|
- self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記2行に修正
|
66
60
|
- self.__zangyoTeate = self.__zangyoTeate * self.__zangyoJikan # 下記2行に修正
|
67
61
|
+ self.__zangyoTeate = self.__zangyo_jikyuu * self.__zangyoJikan
|
68
|
-
+ self._
|
62
|
+
+ self.__kyuyo = self._KyuyoKeisanK10__kyuyo + self.__zangyoTeate
|
69
63
|
|
70
64
|
def outputZangyoJikan(self):
|
71
65
|
return self.__zangyoJikan
|
72
66
|
|
73
67
|
def outputZangyoTeate(self):
|
74
68
|
return self.__zangyoTeate
|
69
|
+
|
70
|
+
+ def outputKyuyo(self): # 追加
|
71
|
+
+ return self.__kyuyo # 追加
|
75
72
|
```
|
10
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l)
|
43
43
|
```
|
44
44
|
として、__kyuuyo を残業込みの時間に更新してあげる必要があります。
|
45
|
-
(
|
45
|
+
(本来想定しない方法かもしれませんが、「7. K10_main.py とK10_class.py はそのまま用いる」という条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
|
46
46
|
|
47
47
|
---
|
48
48
|
もうすこし修正するなら下記のようになるでしょうか。
|
9
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l)
|
43
43
|
```
|
44
44
|
として、__kyuuyo を残業込みの時間に更新してあげる必要があります。
|
45
|
-
(もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、K
|
45
|
+
(もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、「7. K10_main.py とK10_class.py はそのまま用いる」という条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
|
46
46
|
|
47
47
|
---
|
48
48
|
もうすこし修正するなら下記のようになるでしょうか。
|
8
test
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
前提をすべて満たすという条件のもとでなるべく変更を最小限にするならば、たとえば下記のようになるでしょうか。(そもそもの「変更してはいけない」KyuyoKeisanK10クラスの設計もあって、必ずしも良いコードであるとは言えないかもしれませんが)
|
2
|
+
(回答後半にさらに修正したバージョンも追記しています)
|
2
3
|
```diff
|
3
4
|
from K10_class import KyuyoKeisanK10
|
4
5
|
class ZangyoKeisanK10(KyuyoKeisanK10):
|
7
test
CHANGED
@@ -63,7 +63,7 @@
|
|
63
63
|
self.__zangyoJikan = l
|
64
64
|
- self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記2行に修正
|
65
65
|
- self.__zangyoTeate = self.__zangyoTeate * self.__zangyoJikan # 下記2行に修正
|
66
|
-
+ self.__zangyoTeate = self.__zangyo_jikyuu * l
|
66
|
+
+ self.__zangyoTeate = self.__zangyo_jikyuu * self.__zangyoJikan
|
67
67
|
+ self._KyuyoKeisanK10__kyuyo = self._KyuyoKeisanK10__kyuyo + self.__zangyoTeate
|
68
68
|
|
69
69
|
def outputZangyoJikan(self):
|
6
test
CHANGED
@@ -45,7 +45,7 @@
|
|
45
45
|
|
46
46
|
---
|
47
47
|
もうすこし修正するなら下記のようになるでしょうか。
|
48
|
-
+ 元コードでは、__zangyoTeate が残業の時間単価と、残業代総額の2つの意味を持っていた
|
48
|
+
+ 元コードでは、__zangyoTeate が残業の時間単価と、残業代総額の2つの意味を持っているため、これを分けて整理しました。
|
49
49
|
+ 元コードでは、ZangyoKeisanK10 の `__init__` で self.__jikyuu を設定しているが、これが条件5 に反している可能性があるため、self.__jikyuu は継承元クラス内にとどめる形に修正しました。
|
50
50
|
|
51
51
|
```diff
|
5
test
CHANGED
@@ -45,13 +45,15 @@
|
|
45
45
|
|
46
46
|
---
|
47
47
|
もうすこし修正するなら下記のようになるでしょうか。
|
48
|
-
元コードでは、__zangyoTeate が残業の時間単価と、残業代総額の2つの意味を持っていたため、これを分けて整理しました。
|
48
|
+
+ 元コードでは、__zangyoTeate が残業の時間単価と、残業代総額の2つの意味を持っていたため、これを分けて整理しました。
|
49
|
+
+ 元コードでは、ZangyoKeisanK10 の `__init__` で self.__jikyuu を設定しているが、これが条件5 に反している可能性があるため、self.__jikyuu は継承元クラス内にとどめる形に修正しました。
|
50
|
+
|
49
51
|
```diff
|
50
52
|
from K10_class import KyuyoKeisanK10
|
51
53
|
class ZangyoKeisanK10(KyuyoKeisanK10):
|
52
54
|
def __init__(self,n,j,z):
|
53
55
|
super().__init__(n,j)
|
54
|
-
|
56
|
+
- self.__jikyu = j # 削除
|
55
57
|
- self.__zangyoTeate = z # 下記に修正
|
56
58
|
+ self.__zangyo_jikyuu = z
|
57
59
|
self.__zangyoJikan = -1
|
@@ -62,7 +64,7 @@
|
|
62
64
|
- self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記2行に修正
|
63
65
|
- self.__zangyoTeate = self.__zangyoTeate * self.__zangyoJikan # 下記2行に修正
|
64
66
|
+ self.__zangyoTeate = self.__zangyo_jikyuu * l
|
65
|
-
+ self._KyuyoKeisanK10__kyuyo =
|
67
|
+
+ self._KyuyoKeisanK10__kyuyo = self._KyuyoKeisanK10__kyuyo + self.__zangyoTeate
|
66
68
|
|
67
69
|
def outputZangyoJikan(self):
|
68
70
|
return self.__zangyoJikan
|
4
test
CHANGED
@@ -59,7 +59,7 @@
|
|
59
59
|
def kyuyoKeisan(self,k,l):
|
60
60
|
+ super().kyuyoKeisan(k)
|
61
61
|
self.__zangyoJikan = l
|
62
|
-
- self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記2行に修正
|
62
|
+
- self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記2行に修正
|
63
63
|
- self.__zangyoTeate = self.__zangyoTeate * self.__zangyoJikan # 下記2行に修正
|
64
64
|
+ self.__zangyoTeate = self.__zangyo_jikyuu * l
|
65
65
|
+ self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + self.__zangyoTeate
|
3
test
CHANGED
@@ -47,7 +47,7 @@
|
|
47
47
|
もうすこし修正するなら下記のようになるでしょうか。
|
48
48
|
元コードでは、__zangyoTeate が残業の時間単価と、残業代総額の2つの意味を持っていたため、これを分けて整理しました。
|
49
49
|
```diff
|
50
|
-
|
50
|
+
from K10_class import KyuyoKeisanK10
|
51
51
|
class ZangyoKeisanK10(KyuyoKeisanK10):
|
52
52
|
def __init__(self,n,j,z):
|
53
53
|
super().__init__(n,j)
|
2
test
CHANGED
@@ -43,4 +43,30 @@
|
|
43
43
|
として、__kyuuyo を残業込みの時間に更新してあげる必要があります。
|
44
44
|
(もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、KyuyoKeisanK10を修正してはいけないという条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
|
45
45
|
|
46
|
+
---
|
47
|
+
もうすこし修正するなら下記のようになるでしょうか。
|
48
|
+
元コードでは、__zangyoTeate が残業の時間単価と、残業代総額の2つの意味を持っていたため、これを分けて整理しました。
|
49
|
+
```diff
|
50
|
+
# from K10_class import KyuyoKeisanK10
|
51
|
+
class ZangyoKeisanK10(KyuyoKeisanK10):
|
52
|
+
def __init__(self,n,j,z):
|
53
|
+
super().__init__(n,j)
|
54
|
+
self.__jikyu = j
|
55
|
+
- self.__zangyoTeate = z # 下記に修正
|
56
|
+
+ self.__zangyo_jikyuu = z
|
57
|
+
self.__zangyoJikan = -1
|
46
58
|
|
59
|
+
def kyuyoKeisan(self,k,l):
|
60
|
+
+ super().kyuyoKeisan(k)
|
61
|
+
self.__zangyoJikan = l
|
62
|
+
- self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記2行に修正
|
63
|
+
- self.__zangyoTeate = self.__zangyoTeate * self.__zangyoJikan # 下記2行に修正
|
64
|
+
+ self.__zangyoTeate = self.__zangyo_jikyuu * l
|
65
|
+
+ self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + self.__zangyoTeate
|
66
|
+
|
67
|
+
def outputZangyoJikan(self):
|
68
|
+
return self.__zangyoJikan
|
69
|
+
|
70
|
+
def outputZangyoTeate(self):
|
71
|
+
return self.__zangyoTeate
|
72
|
+
```
|
1
test
CHANGED
@@ -41,6 +41,6 @@
|
|
41
41
|
self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l)
|
42
42
|
```
|
43
43
|
として、__kyuuyo を残業込みの時間に更新してあげる必要があります。
|
44
|
-
(もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、KyuyoKeisanK10を修正してはいけないという条件
|
44
|
+
(もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、KyuyoKeisanK10を修正してはいけないという条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
|
45
45
|
|
46
46
|
|