回答編集履歴

12

冗長な説明を削除

2020/01/13 01:02

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,10 +1,6 @@
1
1
  変数参照するとき、インスタンスに変数がなければクラス変数を探しにいきます。
2
2
 
3
3
  代入は、インスタンスに代入します。
4
-
5
-
6
-
7
- `self.common_var.append(value)` は、 `self.common_var` でインスタンス変数を探しにいきますが、インスタンスに変数がないのでクラス変数を参照します。参照したクラス変数に対して`.append`でオブジェクトの中に`value`を追加しています。
8
4
 
9
5
 
10
6
 

11

バッククオート修正

2020/01/13 01:02

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  と2段階に処理していて、`self.common_var` でオブジェクトを取り出して、取り出されたオブジェクトに対して `value` を `append` します。
42
42
 
43
- インスタンス変数には `common_var` がないので、クラス変数の中から `common_var` を取り出し、クラス変数の中のリストオブジェクトに `value' が追加されます。
43
+ インスタンス変数には `common_var` がないので、クラス変数の中から `common_var` を取り出し、クラス変数の中のリストオブジェクトに `value` が追加されます。
44
44
 
45
45
 
46
46
 

10

空行追加

2020/01/13 00:45

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -13,6 +13,8 @@
13
13
  [https://qiita.com/msssgur/items/12992fc816e6adf32cff#comment-9244f5c1b6d7e194d59d
14
14
 
15
15
  ](https://qiita.com/msssgur/items/12992fc816e6adf32cff#comment-9244f5c1b6d7e194d59d)
16
+
17
+
16
18
 
17
19
  `self.common_var = value`
18
20
 

9

リンク化

2020/01/13 00:44

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  その様子を図にして、Qiitaのコメントに書いておきました。
12
12
 
13
- https://qiita.com/msssgur/items/12992fc816e6adf32cff#comment-9244f5c1b6d7e194d59d
13
+ [https://qiita.com/msssgur/items/12992fc816e6adf32cff#comment-9244f5c1b6d7e194d59d
14
14
 
15
-
15
+ ](https://qiita.com/msssgur/items/12992fc816e6adf32cff#comment-9244f5c1b6d7e194d59d)
16
16
 
17
17
  `self.common_var = value`
18
18
 

8

説明追記

2020/01/13 00:43

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -8,135 +8,41 @@
8
8
 
9
9
 
10
10
 
11
- クラス変数辞書とインスタンス変数辞書を、代入前と代入後でprint比較てみてください
11
+ その様子図にしてQiitaのコメントに書いおきま
12
+
13
+ https://qiita.com/msssgur/items/12992fc816e6adf32cff#comment-9244f5c1b6d7e194d59d
12
14
 
13
15
 
14
16
 
15
- ```py
16
-
17
- print(vars(TestClass))
17
+ `self.common_var = value`
18
-
19
- print(vars(tc1))
20
-
21
- print(vars(tc2))
22
-
23
- ```
24
18
 
25
19
 
26
20
 
27
- クラス変数やインスタンス変数は外から定義・参照・変更することもできます。
21
+ は、インスタンスの中に個別の common_var 変数を作って代入します。
28
-
29
- インタープリタで確認する様子を以下に示します。
30
22
 
31
23
 
32
24
 
33
- ```py
25
+ `self.common_var.append(value)`
34
26
 
35
- >>> class Sample:
36
27
 
37
- ... pass
38
28
 
39
- ...
29
+
40
30
 
41
- >>> Sample.common_var = 123
42
31
 
43
- >>> t1 = Sample()
44
32
 
45
- >>> t2 = Sample()
33
+ `var = self.common_var`
46
34
 
47
- >>>
35
+ `var.append(value)`
48
36
 
49
- >>> vars(Sample)
50
37
 
51
- mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
52
38
 
53
- 'common_var': 123})
39
+ と2段階に処理していて、`self.common_var` でオブジェクトを取り出して、取り出されたオブジェクトに対して `value` を `append` します。
54
40
 
55
- >>> vars(t1)
41
+ インスタンス変数には `common_var` がないので、クラス変数の中から `common_var` を取り出し、クラス変数の中のリストオブジェクトに `value' が追加されます。
56
42
 
57
- {}
58
43
 
59
- >>> vars(t2)
60
44
 
61
- {}
62
-
63
- >>>
64
-
65
- >>> t1.common_var = 456
66
-
67
- >>> Sample.common_var
68
-
69
- 123
70
-
71
- >>> t1.common_var
72
-
73
- 456
74
-
75
- >>> t2.common_var
76
-
77
- 123
78
-
79
- >>> vars(Sample)
80
-
81
- mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
82
-
83
- 'common_var': 123})
84
-
85
- >>> vars(t1)
86
-
87
- {'common_var': 456}
88
-
89
- >>> vars(t2)
90
-
91
- {}
92
-
93
- >>>
94
-
95
- >>> Sample.common_list = []
96
-
97
- >>> vars(Sample)
98
-
99
- mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
100
-
101
- 'common_var': 123, 'common_list': []})
102
-
103
- >>> vars(t1)
104
-
105
- {'common_var': 456}
106
-
107
- >>> vars(t2)
108
-
109
- {}
110
-
111
- >>> t1.common_list
112
-
113
- []
114
-
115
- >>> t2.common_list
116
-
117
- []
118
-
119
- >>> t2.common_list.append(789)
45
+ クラス変数辞書とインスタンス変数辞書を、代入前と代入後でprintして比較してみてください。
120
-
121
- >>> vars(Sample)
122
-
123
- mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
124
-
125
- 'common_var': 123, 'common_list': [789]})
126
-
127
- >>> vars(t1)
128
-
129
- {'common_var': 456}
130
-
131
- >>> vars(t2)
132
-
133
- {}
134
-
135
- >>> t1.common_list
136
-
137
- [789]
138
-
139
- ```
140
46
 
141
47
 
142
48
 

7

言語指定

2020/01/13 00:37

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -266,7 +266,7 @@
266
266
 
267
267
 
268
268
 
269
- ```
269
+ ```python
270
270
 
271
271
  ['Set Class Variable']
272
272
 

6

クラスとインスタンスの両方に変数を作る例を追記

2020/01/12 13:11

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -209,3 +209,69 @@
209
209
  tc2 variables: {}
210
210
 
211
211
  ```
212
+
213
+
214
+
215
+ クラス変数とインスタンス変数の両方を定義する:
216
+
217
+
218
+
219
+ ```python
220
+
221
+ class TestClass(object):
222
+
223
+ common_var = [] # クラス変数
224
+
225
+
226
+
227
+ def __init__(self):
228
+
229
+ self.common_var = [] # インスタンス変数
230
+
231
+
232
+
233
+ def get_variable(self):
234
+
235
+ return self.common_var
236
+
237
+
238
+
239
+ def set_variable(self, value):
240
+
241
+ self.common_var.append(value)
242
+
243
+
244
+
245
+ tc1 = TestClass()
246
+
247
+ tc2 = TestClass()
248
+
249
+ TestClass.common_var.append("Set Class Variable")
250
+
251
+ tc1.set_variable("Set Instance Variable 1")
252
+
253
+ tc2.set_variable("Set Instance Variable 2")
254
+
255
+ print(TestClass.common_var)
256
+
257
+ print(tc1.common_var)
258
+
259
+ print(tc2.common_var)
260
+
261
+ ```
262
+
263
+
264
+
265
+ 実行結果
266
+
267
+
268
+
269
+ ```
270
+
271
+ ['Set Class Variable']
272
+
273
+ ['Set Instance Variable 1']
274
+
275
+ ['Set Instance Variable 2']
276
+
277
+ ```

5

質問の下側のクラスでの確認結果追加

2020/01/12 13:08

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -137,3 +137,75 @@
137
137
  [789]
138
138
 
139
139
  ```
140
+
141
+
142
+
143
+ 質問の下側のクラスでの確認:
144
+
145
+
146
+
147
+ ```python
148
+
149
+ class TestClass(object):
150
+
151
+ common_var = []
152
+
153
+ def get_variable(self):
154
+
155
+ return self.common_var
156
+
157
+ def set_variable(self, value):
158
+
159
+ self.common_var.append(value)
160
+
161
+
162
+
163
+ tc1 = TestClass()
164
+
165
+ tc2 = TestClass()
166
+
167
+ print("TestClass variables:", vars(TestClass))
168
+
169
+ print("tc1 variables:", vars(tc1))
170
+
171
+ print("tc2 variables:", vars(tc2))
172
+
173
+ tc1.set_variable("Set Variable")
174
+
175
+ print(tc2.common_var)
176
+
177
+ print("TestClass variables:", vars(TestClass))
178
+
179
+ print("tc1 variables:", vars(tc1))
180
+
181
+ print("tc2 variables:", vars(tc2))
182
+
183
+ ```
184
+
185
+
186
+
187
+ 実行結果
188
+
189
+
190
+
191
+ ```python
192
+
193
+ TestClass variables: {'__module__': '__main__',, 'get_variable': <function TestClass.get_variable at 0x6fffffd0d730>, 'set_variable': <function TestClass.set_variable at 0x6fffffd0d7b8>, '__dict__': <attribute '__dict__' of 'TestClass' objects>, '__weakref__': <attribute '__weakref__' of 'TestClass' objects>, '__doc__': None
194
+
195
+ 'common_var': []}
196
+
197
+ tc1 variables: {}
198
+
199
+ tc2 variables: {}
200
+
201
+ ['Set Variable']
202
+
203
+ TestClass variables: {'__module__': '__main__', 'get_variable': <function TestClass.get_variable at 0x6fffffd0d730>, 'set_variable': <function TestClass.set_variable at 0x6fffffd0d7b8>, '__dict__': <attribute '__dict__' of 'TestClass' objects>, '__weakref__': <attribute '__weakref__' of 'TestClass' objects>, '__doc__': None,
204
+
205
+ 'common_var': ['Set Variable']}
206
+
207
+ tc1 variables: {}
208
+
209
+ tc2 variables: {}
210
+
211
+ ```

4

貼り付けるソースコードを間違えたので訂正

2020/01/12 12:35

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  ...
40
40
 
41
- >>> Sample.value = 123
41
+ >>> Sample.common_var = 123
42
42
 
43
43
  >>> t1 = Sample()
44
44
 
@@ -50,7 +50,7 @@
50
50
 
51
51
  mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
52
52
 
53
- 'value': 123})
53
+ 'common_var': 123})
54
54
 
55
55
  >>> vars(t1)
56
56
 
@@ -62,17 +62,17 @@
62
62
 
63
63
  >>>
64
64
 
65
- >>> t1.value = 456
65
+ >>> t1.common_var = 456
66
66
 
67
- >>> Sample.value
67
+ >>> Sample.common_var
68
68
 
69
69
  123
70
70
 
71
- >>> t1.value
71
+ >>> t1.common_var
72
72
 
73
73
  456
74
74
 
75
- >>> t2.value
75
+ >>> t2.common_var
76
76
 
77
77
  123
78
78
 
@@ -80,11 +80,11 @@
80
80
 
81
81
  mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
82
82
 
83
- 'value': 123})
83
+ 'common_var': 123})
84
84
 
85
85
  >>> vars(t1)
86
86
 
87
- {'value': 456}
87
+ {'common_var': 456}
88
88
 
89
89
  >>> vars(t2)
90
90
 
@@ -92,47 +92,47 @@
92
92
 
93
93
  >>>
94
94
 
95
- >>> Sample.array = []
95
+ >>> Sample.common_list = []
96
96
 
97
97
  >>> vars(Sample)
98
98
 
99
99
  mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
100
100
 
101
- 'value': 123, 'array': []})
101
+ 'common_var': 123, 'common_list': []})
102
102
 
103
103
  >>> vars(t1)
104
104
 
105
- {'value': 456}
105
+ {'common_var': 456}
106
106
 
107
107
  >>> vars(t2)
108
108
 
109
109
  {}
110
110
 
111
- >>> t1.array
111
+ >>> t1.common_list
112
112
 
113
113
  []
114
114
 
115
- >>> t2.array
115
+ >>> t2.common_list
116
116
 
117
117
  []
118
118
 
119
- >>> t2.array.append(789)
119
+ >>> t2.common_list.append(789)
120
120
 
121
121
  >>> vars(Sample)
122
122
 
123
123
  mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
124
124
 
125
- 'value': 123, 'array': [789]})
125
+ 'common_var': 123, 'common_list': [789]})
126
126
 
127
127
  >>> vars(t1)
128
128
 
129
- {'value': 456}
129
+ {'common_var': 456}
130
130
 
131
131
  >>> vars(t2)
132
132
 
133
133
  {}
134
134
 
135
- >>> t1.array
135
+ >>> t1.common_list
136
136
 
137
137
  [789]
138
138
 

3

変数辞書の確認の様子を追加

2020/01/12 12:20

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -21,3 +21,119 @@
21
21
  print(vars(tc2))
22
22
 
23
23
  ```
24
+
25
+
26
+
27
+ クラス変数やインスタンス変数は外から定義・参照・変更することもできます。
28
+
29
+ インタープリタで確認する様子を以下に示します。
30
+
31
+
32
+
33
+ ```py
34
+
35
+ >>> class Sample:
36
+
37
+ ... pass
38
+
39
+ ...
40
+
41
+ >>> Sample.value = 123
42
+
43
+ >>> t1 = Sample()
44
+
45
+ >>> t2 = Sample()
46
+
47
+ >>>
48
+
49
+ >>> vars(Sample)
50
+
51
+ mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
52
+
53
+ 'value': 123})
54
+
55
+ >>> vars(t1)
56
+
57
+ {}
58
+
59
+ >>> vars(t2)
60
+
61
+ {}
62
+
63
+ >>>
64
+
65
+ >>> t1.value = 456
66
+
67
+ >>> Sample.value
68
+
69
+ 123
70
+
71
+ >>> t1.value
72
+
73
+ 456
74
+
75
+ >>> t2.value
76
+
77
+ 123
78
+
79
+ >>> vars(Sample)
80
+
81
+ mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
82
+
83
+ 'value': 123})
84
+
85
+ >>> vars(t1)
86
+
87
+ {'value': 456}
88
+
89
+ >>> vars(t2)
90
+
91
+ {}
92
+
93
+ >>>
94
+
95
+ >>> Sample.array = []
96
+
97
+ >>> vars(Sample)
98
+
99
+ mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
100
+
101
+ 'value': 123, 'array': []})
102
+
103
+ >>> vars(t1)
104
+
105
+ {'value': 456}
106
+
107
+ >>> vars(t2)
108
+
109
+ {}
110
+
111
+ >>> t1.array
112
+
113
+ []
114
+
115
+ >>> t2.array
116
+
117
+ []
118
+
119
+ >>> t2.array.append(789)
120
+
121
+ >>> vars(Sample)
122
+
123
+ mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'Sample' objects>, '__weakref__': <attribute '__weakref__' of 'Sample' objects>, '__doc__': None,
124
+
125
+ 'value': 123, 'array': [789]})
126
+
127
+ >>> vars(t1)
128
+
129
+ {'value': 456}
130
+
131
+ >>> vars(t2)
132
+
133
+ {}
134
+
135
+ >>> t1.array
136
+
137
+ [789]
138
+
139
+ ```

2

文言修正

2020/01/12 12:19

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- `self.common_var.append(value)` は、 `self.common_var` でインスタンス変数を探しにいきますが、インスタンスに変数がないのでクラス変数を参照します。参照したオブジェに対して`.append`でクラス変数のオブジェクトの中に`value`を追加しています。
7
+ `self.common_var.append(value)` は、 `self.common_var` でインスタンス変数を探しにいきますが、インスタンスに変数がないのでクラス変数を参照します。参照したクラス変数に対して`.append`でオブジェクトの中に`value`を追加しています。
8
8
 
9
9
 
10
10
 

1

変数辞書表示方法追加

2020/01/12 11:58

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -5,3 +5,19 @@
5
5
 
6
6
 
7
7
  `self.common_var.append(value)` は、 `self.common_var` でインスタンス変数を探しにいきますが、インスタンスに変数がないのでクラス変数を参照します。参照したオブジェクトに対して`.append`でクラス変数のオブジェクトの中に`value`を追加しています。
8
+
9
+
10
+
11
+ クラス変数辞書とインスタンス変数辞書を、代入前と代入後でprintして比較してみてください。
12
+
13
+
14
+
15
+ ```py
16
+
17
+ print(vars(TestClass))
18
+
19
+ print(vars(tc1))
20
+
21
+ print(vars(tc2))
22
+
23
+ ```