回答編集履歴

14

 

2022/12/17 00:33

投稿

退会済みユーザー
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_jikyuu = z
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_jikyuu * self.__zangyoJikan
61
+ + self.__zangyoTeate = self.__zangyo_jikyu * self.__zangyoJikan
62
62
  + self.__kyuyo = super().outputKyuyo() + self.__zangyoTeate
63
63
 
64
64
  def outputZangyoJikan(self):

13

 

2022/12/17 00:31

投稿

退会済みユーザー
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

 

2022/12/17 00:26

投稿

退会済みユーザー
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 = self._KyuyoKeisanK10__kyuyo + self.__zangyoTeate
62
+ + self.__kyuyo = super().outputKyuyo() + self.__zangyoTeate
63
63
 
64
64
  def outputZangyoJikan(self):
65
65
  return self.__zangyoJikan

11

修正

2022/12/17 00:22

投稿

退会済みユーザー
test CHANGED
@@ -12,8 +12,7 @@
12
12
  def kyuyoKeisan(self,k,l):
13
13
  + super().kyuyoKeisan(k) # 追加
14
14
  self.__zangyoJikan = l
15
- - self.__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l) # 下記に修正
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('勤務時間:',x.outputKinmuJikan(),'[時間]',super(ZangyoKeisanK10,x).outputKyuyo(),'円')
36
+ print('総支給額:',x.outputKyuyo(),'円')
38
37
  ```
39
- としていますが、この outputKyuyo 関数内で取得しているのは、継承元の __kyuuyo 属性であり、残業込みの金額になっていません。
38
+ としていますが、この outputKyuyo 関数は継承元クラスの関数を呼び出しており、継承元の self.__kyuuyo 残業込みの金額になっていません。
40
- したがって。継承先の kyuyoKeisan 内で
41
- ```
42
- self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l)
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._KyuyoKeisanK10__kyuyo = self._KyuyoKeisanK10__kyuyo + self.__zangyoTeate
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

 

2022/12/16 23:58

投稿

退会済みユーザー
test CHANGED
@@ -42,7 +42,7 @@
42
42
  self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l)
43
43
  ```
44
44
  として、__kyuuyo を残業込みの時間に更新してあげる必要があります。
45
- もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、「7. K10_main.py とK10_class.py はそのまま用いる」という条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
45
+ (本来想定しない方法かもしれませんが、「7. K10_main.py とK10_class.py はそのまま用いる」という条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
46
46
 
47
47
  ---
48
48
  もうすこし修正するなら下記のようになるでしょうか。

9

 

2022/12/16 23:42

投稿

退会済みユーザー
test CHANGED
@@ -42,7 +42,7 @@
42
42
  self._KyuyoKeisanK10__kyuyo = (self.__jikyu * k) + (self.__zangyoTeate * l)
43
43
  ```
44
44
  として、__kyuuyo を残業込みの時間に更新してあげる必要があります。
45
- (もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、KyuyoKeisanK10を修正してはいけないという条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
45
+ (もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、「7. K10_main.py とK10_class.py そのまま用る」という条件で正しく計算させる方法として、私はこれしか思いつきませんでした。)
46
46
 
47
47
  ---
48
48
  もうすこし修正するなら下記のようになるでしょうか。

8

 

2022/12/16 23:38

投稿

退会済みユーザー
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

 

2022/12/16 23:21

投稿

退会済みユーザー
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

 

2022/12/16 23:20

投稿

退会済みユーザー
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

 

2022/12/16 23:19

投稿

退会済みユーザー
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
- self.__jikyu = j
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 = (self.__jikyu * k) + self.__zangyoTeate
67
+ + self._KyuyoKeisanK10__kyuyo = self._KyuyoKeisanK10__kyuyo + self.__zangyoTeate
66
68
 
67
69
  def outputZangyoJikan(self):
68
70
  return self.__zangyoJikan

4

 

2022/12/16 23:13

投稿

退会済みユーザー
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

 

2022/12/16 23:12

投稿

退会済みユーザー
test CHANGED
@@ -47,7 +47,7 @@
47
47
  もうすこし修正するなら下記のようになるでしょうか。
48
48
  元コードでは、__zangyoTeate が残業の時間単価と、残業代総額の2つの意味を持っていたため、これを分けて整理しました。
49
49
  ```diff
50
- # from K10_class import KyuyoKeisanK10
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

 

2022/12/16 23:11

投稿

退会済みユーザー
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

 

2022/12/16 22:58

投稿

退会済みユーザー
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を修正してはいけないという条件だtご、これ以外に正しく計算させる方法はないと思いま
44
+ (もともと __kyuuyo はプライベートフィールドなので、本来想定しない方法かもしれませんが、KyuyoKeisanK10を修正してはいけないという条件正しく計算させる方法として、私これしか思いつきせんでした。
45
45
 
46
46