回答編集履歴
3
補足2
answer
CHANGED
@@ -9,4 +9,15 @@
|
|
9
9
|
return 1
|
10
10
|
|
11
11
|
Test._num = Test._set_num()
|
12
|
-
```
|
12
|
+
```
|
13
|
+
|
14
|
+
---
|
15
|
+
クラスの定義内でクラスメソッドにアクセスすることはできません。
|
16
|
+
定義したあとにメンバーを編集することはできます。
|
17
|
+
|
18
|
+
`def __set_num(cls):`とアンダースコアを2つ先頭につけると、[__name mangling__](https://docs.python.org/3/tutorial/classes.html#private-variables)により外からアクセスしにくくなるように自動的に名前が変えられます。
|
19
|
+
|
20
|
+
なので外からクラスメソッドをアクセスできるように上のコードではアンダースコアを1つにしました。
|
21
|
+
|
22
|
+
参考
|
23
|
+
[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
修正
answer
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
```lang-python
|
6
6
|
class Test:
|
7
7
|
@classmethod
|
8
|
-
def
|
8
|
+
def _set_num(cls):
|
9
9
|
return 1
|
10
10
|
|
11
|
-
Test._num = Test.
|
11
|
+
Test._num = Test._set_num()
|
12
12
|
```
|
1
補足
answer
CHANGED
@@ -1,1 +1,12 @@
|
|
1
|
-
`cls`は`__set_num`の引数であって、その外では定義されていないので当然使えません。
|
1
|
+
`cls`は`__set_num`の引数であって、その外では定義されていないので当然使えません。
|
2
|
+
|
3
|
+
質問者さんがやりたいことがいまひとつ分からないですが、こうすればエラーはでないです。
|
4
|
+
|
5
|
+
```lang-python
|
6
|
+
class Test:
|
7
|
+
@classmethod
|
8
|
+
def __set_num(cls):
|
9
|
+
return 1
|
10
|
+
|
11
|
+
Test._num = Test.__set_num()
|
12
|
+
```
|