質問編集履歴

4

回答へのお礼を追記した

2016/07/24 06:58

投稿

MasatakaMiyoshi
MasatakaMiyoshi

スコア109

test CHANGED
File without changes
test CHANGED
@@ -155,3 +155,15 @@
155
155
  chef.show_foods() # {'meat': (2.0, 15)}
156
156
 
157
157
  ```
158
+
159
+
160
+
161
+ 皆さん多くの有用な回答をありがとうございました。
162
+
163
+ 当初の質問「foodが切るかchefが切るか」について,food派の回答で最も納得のいく理由を説明してくださったLLmanさんをベストアンサーとさせていただきました。
164
+
165
+ (全員へ返信する時間がなかったのでLLmanさんへの返信欄に全員宛のお礼を書かせていただきました)
166
+
167
+
168
+
169
+ 今回知ったことを実際のコーディングにも活かせていければと思っております。

3

具体例の追加

2016/07/24 06:58

投稿

MasatakaMiyoshi
MasatakaMiyoshi

スコア109

test CHANGED
File without changes
test CHANGED
@@ -53,3 +53,105 @@
53
53
  これらについて,オブジェクト指向に慣れた方の意見を聞きたいです。
54
54
 
55
55
  よろしくお願いします。
56
+
57
+
58
+
59
+ ---
60
+
61
+
62
+
63
+ 補足: 僕が想定していた設計例はこんな感じです
64
+
65
+
66
+
67
+ ```Python
68
+
69
+ class Food(object):
70
+
71
+ def __init__(self, size, hardness):
72
+
73
+ self.size = size
74
+
75
+ self.hardness = hardness
76
+
77
+
78
+
79
+
80
+
81
+ class Chef(object):
82
+
83
+ def __init__(self, level):
84
+
85
+ self.level = level
86
+
87
+ self.has_knife = False
88
+
89
+ self.foods_ = {}
90
+
91
+
92
+
93
+ def set_food(self, food, obj, n):
94
+
95
+ self.foods_[food] = [obj, n]
96
+
97
+ print('%sを手に入れた!' % (food))
98
+
99
+
100
+
101
+ def show_foods(self):
102
+
103
+ foods = self.foods_
104
+
105
+ return {i: (foods[i][0].size, foods[i][1]) for i in foods.keys()}
106
+
107
+
108
+
109
+ def cut(self, food, n):
110
+
111
+ if food not in self.foods_.keys():
112
+
113
+ print('食材がありません')
114
+
115
+ elif not self.has_knife:
116
+
117
+ print('ナイフがないと切れません')
118
+
119
+ elif self.level < self.foods_[food][0].hardness:
120
+
121
+ print('レベルがたりません')
122
+
123
+ else:
124
+
125
+ self.foods_[food][0].size *= 1 / n
126
+
127
+ self.foods_[food][1] *= n
128
+
129
+ print('%sを%d個に切断しました' % (food, n))
130
+
131
+
132
+
133
+ meat = Food(size=10, hardness=3)
134
+
135
+ chef = Chef(level=1)
136
+
137
+ chef.cut('meat', 5) # 食材がありません
138
+
139
+ chef.show_foods() # {}
140
+
141
+ chef.set_food('meat', meat, 3) # 'meatを手に入れた!'
142
+
143
+ chef.show_foods() # {'meat': (10, 3)}
144
+
145
+ chef.cut('meat', 5) # ナイフがないと切れません
146
+
147
+ chef.has_knife = True
148
+
149
+ chef.cut('meat', 5) # レベルがたりません
150
+
151
+ chef.level += 10
152
+
153
+ chef.cut('meat', 5) # meatを5個に切断しました
154
+
155
+ chef.show_foods() # {'meat': (2.0, 15)}
156
+
157
+ ```

2

誤字の修正のみ

2016/07/22 00:19

投稿

MasatakaMiyoshi
MasatakaMiyoshi

スコア109

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- * chicken.cut(5) # chickenは (Foodクラスを継承した) Meetクラスのインスタンス
13
+ * chicken.cut(5) # chickenは (Foodクラスを継承した) Meatクラスのインスタンス
14
14
 
15
15
  * chef.cut("chicken", 5) # chefはChefクラスのインスタンス。あらかじめset_foodなどで{"chicken": chicken}を内部に保持した状態にしておく
16
16
 
@@ -20,7 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- 鶏肉の状態が変化するという意味では,「chickenが5つに分割された状態になる」前者の方が自然であるように思えます。それに説明が短いです。おまけに「オブジェクト指向 料理」で検索するとこっちの例え話しか出てきません。議論のきっかけになった第三者の意見も,「鶏肉.cut(5)できたらいいのに」というものでした。
23
+ 鶏肉の状態が変化するという意味では,「chickenが5つに分割された状態になる」前者の方が自然であるように思えます。それに説明が短くて済みます。おまけに「オブジェクト指向 料理」で検索するとこっちの例え話しか出てきません。議論のきっかけになった第三者の意見も,「鶏肉.cut(5)できたらいいのに」というものでした。
24
24
 
25
25
 
26
26
 
@@ -32,7 +32,7 @@
32
32
 
33
33
  * 手持ちの食材を見せる → chef.show_foods()
34
34
 
35
- * 親子丼のレシピを覚える → chef.set_menu("oyakodon", [needed_foods])
35
+ * 親子丼のレシピを覚える → chef.learn_menu("oyakodon", [needed_foods])
36
36
 
37
37
  * 食材chickenとeggを消費して料理oyakodonを完成させる → chef.cook("oyakodon")
38
38
 

1

書式の改善

2016/07/22 00:06

投稿

MasatakaMiyoshi
MasatakaMiyoshi

スコア109

test CHANGED
@@ -1 +1 @@
1
- オブジェクト指向で料理を例える場合
1
+ オブジェクト指向で料理を例える場合,chicken.cut()かchef.cut()か
test CHANGED
@@ -32,9 +32,9 @@
32
32
 
33
33
  * 手持ちの食材を見せる → chef.show_foods()
34
34
 
35
- * レシピを覚える → chef.set_menu("oyakodon", [needed_foods])
35
+ * 親子丼のレシピを覚える → chef.set_menu("oyakodon", [needed_foods])
36
36
 
37
- * 食材chickenとeggを消費して料理Cを完成させる → chef.cook("oyakodon")
37
+ * 食材chickenとeggを消費して料理oyakodonを完成させる → chef.cook("oyakodon")
38
38
 
39
39
  * 熟練度システムを加える → 「if self.level >= 10」などを加える
40
40