回答編集履歴
3
補足2
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
修正
test
CHANGED
@@ -12,12 +12,12 @@
|
|
12
12
|
|
13
13
|
@classmethod
|
14
14
|
|
15
|
-
def _
|
15
|
+
def _set_num(cls):
|
16
16
|
|
17
17
|
return 1
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
Test._num = Test._
|
21
|
+
Test._num = Test._set_num()
|
22
22
|
|
23
23
|
```
|
1
補足
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
|
+
```
|