回答編集履歴

3

Add second answer

2020/09/09 13:55

投稿

y_shinoda
y_shinoda

スコア3272

test CHANGED
@@ -1,4 +1,8 @@
1
+ ## 元の回答
2
+
3
+
4
+
1
- ## 質問1
5
+ ### 質問1
2
6
 
3
7
 
4
8
 
@@ -42,7 +46,7 @@
42
46
 
43
47
 
44
48
 
45
- ## 質問2
49
+ ### 質問2
46
50
 
47
51
 
48
52
 
@@ -199,3 +203,131 @@
199
203
  これは、クラスが点数を`状態`としてを持ったので、
200
204
 
201
205
  クラスの外で変数として`状態`を持つ必要がなくなったためです
206
+
207
+
208
+
209
+ ## 追記
210
+
211
+
212
+
213
+ > アトリビュート定義(状態を持たせる)のと、初期化せず、外で変数を持たせるかどうかは、
214
+
215
+ > 実装する機能の仕様に合わせて、
216
+
217
+ > ソースコードがより簡潔に短くなる方をアトリビュートとして採用すべき、ということでしょうか。
218
+
219
+
220
+
221
+ 回答者によって見解が分かれるかもしれませんが、個人的には、ほぼ、その認識でよいと思います
222
+
223
+
224
+
225
+ 設計としてはアトリビュートを定義する方が正しい場合でも、
226
+
227
+ ごくまれにですが、余計にコードが煩雑になる場合もあります
228
+
229
+ そのような場合はソースコードが簡潔に短くなる方の設計を採用することもあります
230
+
231
+
232
+
233
+ > 「インスタンスごとに、アトリビュートを定義する必要がある」
234
+
235
+ > との説明があったのですが、今回の場合、
236
+
237
+ > name と data のいずれかをアトリビュートとして定義しないと、
238
+
239
+ > そもそもインスタンス化ができない、という理解であってますでしょうか。
240
+
241
+
242
+
243
+ コンストラクターの定義によります
244
+
245
+
246
+
247
+ 今回のコードはコンストラクター内でアトリビュートを定義しています
248
+
249
+ しかし、そのコンストラクターに、アトリビュートの値として使われる引数を渡さなかった場合、
250
+
251
+ コンストラクターの呼び出しでエラーが発生します
252
+
253
+
254
+
255
+ 例えば次のような場合はインスタンス化できずエラーとなります:
256
+
257
+
258
+
259
+ ```python
260
+
261
+ class Student:
262
+
263
+
264
+
265
+ def __init__(self, name):
266
+
267
+ self.name = name
268
+
269
+
270
+
271
+ a001 = Student()
272
+
273
+ print(a001.name)
274
+
275
+ ```
276
+
277
+
278
+
279
+ 実行結果:
280
+
281
+
282
+
283
+ ```console
284
+
285
+ $ python test.py
286
+
287
+ Traceback (most recent call last):
288
+
289
+ File "test.py", line 6, in <module>
290
+
291
+ a001 = Student()
292
+
293
+ TypeError: __init__() missing 1 required positional argument: 'name'
294
+
295
+ ```
296
+
297
+
298
+
299
+ 次のように、コンストラクターの引数に初期値を定義しておくと、エラーは発生しません:
300
+
301
+
302
+
303
+ ```python
304
+
305
+ class Student:
306
+
307
+
308
+
309
+ def __init__(self, name="Taro"):
310
+
311
+ self.name = name
312
+
313
+
314
+
315
+ a001 = Student()
316
+
317
+ print(a001.name)
318
+
319
+ ```
320
+
321
+
322
+
323
+ 実行結果:
324
+
325
+
326
+
327
+ ```console
328
+
329
+ python test.py
330
+
331
+ Taro
332
+
333
+ ```

2

Add expression

2020/09/09 13:55

投稿

y_shinoda
y_shinoda

スコア3272

test CHANGED
@@ -8,6 +8,12 @@
8
8
 
9
9
 
10
10
 
11
+ 質問のコードの引用元:
12
+
13
+ [(159) Python超入門コース 合併版|Pythonの超基本的な部分をたった1時間で学べます【プログラミング初心者向け入門講座】 - YouTube](https://www.youtube.com/watch?v=HyU3XL2F9GE)
14
+
15
+
16
+
11
17
  ざっと見た感じ特に理由は述べられていなかったので
12
18
 
13
19
  製作者のみ知るところですが、
@@ -32,7 +38,7 @@
32
38
 
33
39
 
34
40
 
35
- 設計としては data もアトリビュートとして持たせる設計の方が良いかもしれません
41
+ 設計としては `data` もアトリビュートとして持たせる設計の方が良いかもしれません
36
42
 
37
43
 
38
44
 

1

Add expression

2020/08/18 13:51

投稿

y_shinoda
y_shinoda

スコア3272

test CHANGED
@@ -37,6 +37,12 @@
37
37
 
38
38
 
39
39
  ## 質問2
40
+
41
+
42
+
43
+ > みなさんは自分でクラスを作成する際、
44
+
45
+ > どういった判断基準で、初期化する/しないを分けているのでしょうか。
40
46
 
41
47
 
42
48