回答編集履歴

2

簡単な実験を追加

2018/10/28 13:16

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -1,4 +1,56 @@
1
1
  前者はインスタンス変数、後者はクラス変数であり、まったくの別物です。
2
+
3
+
4
+
5
+ ```python
6
+
7
+ class Sample_1:
8
+
9
+ def __init__(self):
10
+
11
+ self.x = object() # オブジェクトを入れておく
12
+
13
+
14
+
15
+ class Sample_2:
16
+
17
+ x = object()
18
+
19
+ def __init__(self):
20
+
21
+ pass
22
+
23
+
24
+
25
+ s1_a = Sample_1()
26
+
27
+ s1_b = Sample_1()
28
+
29
+ print(s1_a.x is s1_b.x) # => False
30
+
31
+
32
+
33
+ s2_a = Sample_2()
34
+
35
+ s2_b = Sample_2()
36
+
37
+ print(Sample_2.x is s2_b.x) # => True クラス変数であることの確認
38
+
39
+ print(s2_a.x is s2_b.x) # => True インスタンス間で共有される
40
+
41
+
42
+
43
+ s2_a.x = "hoge" # 面倒くさいことに、こう書くと新たなインスタンス変数が生成される
44
+
45
+ print(s2_a.x is s2_b.x) # => False
46
+
47
+ print(s2_a.x) # => hoge
48
+
49
+ print(s2_b.x) # => <object object at 0x7f71ffab10a0>
50
+
51
+
52
+
53
+ ```
2
54
 
3
55
 
4
56
 

1

追記

2018/10/28 13:16

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -1 +1,7 @@
1
1
  前者はインスタンス変数、後者はクラス変数であり、まったくの別物です。
2
+
3
+
4
+
5
+ 参考リンク
6
+
7
+ [Python のクラス変数とインスタンス変数ってなに? - いっきに Python に詳しくなるサイト](http://nihaoshijie.hatenadiary.jp/entry/2018/01/15/225346)