回答編集履歴

3

補足2

2017/10/12 13:53

投稿

karamarimo
karamarimo

スコア2551

test CHANGED
@@ -21,3 +21,25 @@
21
21
  Test._num = Test._set_num()
22
22
 
23
23
  ```
24
+
25
+
26
+
27
+ ---
28
+
29
+ クラスの定義内でクラスメソッドにアクセスすることはできません。
30
+
31
+ 定義したあとにメンバーを編集することはできます。
32
+
33
+
34
+
35
+ `def __set_num(cls):`とアンダースコアを2つ先頭につけると、[__name mangling__](https://docs.python.org/3/tutorial/classes.html#private-variables)により外からアクセスしにくくなるように自動的に名前が変えられます。
36
+
37
+
38
+
39
+ なので外からクラスメソッドをアクセスできるように上のコードではアンダースコアを1つにしました。
40
+
41
+
42
+
43
+ 参考
44
+
45
+ [https://stackoverflow.com/questions/13900515/how-can-i-access-a-classmethod-from-inside-a-class-in-python](https://stackoverflow.com/questions/13900515/how-can-i-access-a-classmethod-from-inside-a-class-in-python)

2

修正

2017/10/12 13:53

投稿

karamarimo
karamarimo

スコア2551

test CHANGED
@@ -12,12 +12,12 @@
12
12
 
13
13
  @classmethod
14
14
 
15
- def __set_num(cls):
15
+ def _set_num(cls):
16
16
 
17
17
  return 1
18
18
 
19
19
 
20
20
 
21
- Test._num = Test.__set_num()
21
+ Test._num = Test._set_num()
22
22
 
23
23
  ```

1

補足

2017/10/12 13:46

投稿

karamarimo
karamarimo

スコア2551

test CHANGED
@@ -1 +1,23 @@
1
1
  `cls`は`__set_num`の引数であって、その外では定義されていないので当然使えません。
2
+
3
+
4
+
5
+ 質問者さんがやりたいことがいまひとつ分からないですが、こうすればエラーはでないです。
6
+
7
+
8
+
9
+ ```lang-python
10
+
11
+ class Test:
12
+
13
+ @classmethod
14
+
15
+ def __set_num(cls):
16
+
17
+ return 1
18
+
19
+
20
+
21
+ Test._num = Test.__set_num()
22
+
23
+ ```