回答編集履歴

3

追記

2018/01/16 07:14

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -45,3 +45,73 @@
45
45
 
46
46
 
47
47
  ただの関数として定義してもいいかもしれません。このあたりは設計に依ります。
48
+
49
+
50
+
51
+ コメントを受けて
52
+
53
+ ---
54
+
55
+ > sai.shoot(6)はDice.shoot(sai,6)の様に置き換えられてしまうので
56
+
57
+ > shootメソッドを実行したらvの部分に6ではなくsaiが代入されエラーが起こる
58
+
59
+
60
+
61
+ 単純に引数の個数が違うと判断されてしまうからです。
62
+
63
+ ```Python
64
+
65
+ >>> def hoge(a):
66
+
67
+ ... pass
68
+
69
+ ...
70
+
71
+ >>> hoge(1, 2)
72
+
73
+ Traceback (most recent call last):
74
+
75
+ File "<stdin>", line 1, in <module>
76
+
77
+ TypeError: hoge() takes exactly 1 argument (2 given)
78
+
79
+ ```
80
+
81
+
82
+
83
+ ---
84
+
85
+ > メソッドもそれに対応した余分な0番目の引数を
86
+
87
+ > def shoot(self, v)
88
+
89
+ > 用意しておく必要がある
90
+
91
+
92
+
93
+ はい。**インスタンスメソッド**の場合そうなります。
94
+
95
+
96
+
97
+ ---
98
+
99
+ > 後、一応自分でも入力して確かめてみてきちんと動くのを確認しましたが
100
+
101
+ > 回答してくださったスクリプトは
102
+
103
+ > (中略)
104
+
105
+ > selfでなくても大丈夫ですよね?
106
+
107
+
108
+
109
+ その通りです。selfというのは慣習的に使われているにすぎません。
110
+
111
+ ただし、self以外の名前を使う合理性がないので、selfを使った方が良いでしょう。
112
+
113
+
114
+
115
+ Pythonのコーディング規約であるPEP8([日本語](http://pep8-ja.readthedocs.io/ja/latest/)・[本家](https://www.python.org/dev/peps/pep-0008/))にも次のように記載されています。
116
+
117
+ > Always use `self` for the first argument to instance methods.

2

追記

2018/01/16 07:14

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -11,6 +11,12 @@
11
11
  ```
12
12
 
13
13
 
14
+
15
+ なお、Pythonでは`sai.shoot(6)`は`Dice.shoot(sai, 6)`と同等に扱われます。
16
+
17
+
18
+
19
+ ---
14
20
 
15
21
  > 逆にselfを使わなかったらどうやってやるのかと気になったので
16
22
 
@@ -34,4 +40,8 @@
34
40
 
35
41
 
36
42
 
43
+ 呼び出す際は`Dice.shoot(6)`と呼び出すようにしてください。
44
+
45
+
46
+
37
47
  ただの関数として定義してもいいかもしれません。このあたりは設計に依ります。

1

追記

2018/01/16 03:36

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -9,3 +9,29 @@
9
9
  return random.randint(1,v)
10
10
 
11
11
  ```
12
+
13
+
14
+
15
+ > 逆にselfを使わなかったらどうやってやるのかと気になったので
16
+
17
+ > 上記の様なものを試してみたのですが何度試してもうまくいきませんでした
18
+
19
+
20
+
21
+ なるほど。確かにこのメソッドにはselfが不要です。
22
+
23
+ このような際は、staticメソッドにすることも解決策の一つになります。
24
+
25
+ ```Python
26
+
27
+ @staticmethod
28
+
29
+ def shoot(v):
30
+
31
+ return random.randint(1,v)
32
+
33
+ ```
34
+
35
+
36
+
37
+ ただの関数として定義してもいいかもしれません。このあたりは設計に依ります。